開発者の比較
すぐに予約する-システムアーキテクチャでビジネスロジックの一部を提供し、この記事の範囲を超える多くの実際的な理由で正当化されている場合、ビジネスロジックの一部をストアド関数に配置することに何もしません。
私はオラクルと古い密接な関係を持っています。 私は多くの素晴らしいアーキテクチャとコード、そして多くのひどい「スタック」を見ました。 Oracleは、開発者に無限の機会を提供します。ほとんどの場合、正しいトリックがすぐに見つかります。
一般に、Oracleはすばらしいツールであり、このような富が原理的にどのように機能し、安定して機能するのか不思議に思うことはありません。
約2年前、私はエンタープライズの世界からフリースイミングに移行しました。フリースイミングでは、コアあたり$ 47000のOracleの巨人が手の届かないところにあります。
最初のフリーランスプロジェクトの1つは、サブサテライトオペレーターへの小額の請求でした。 RDBMSを選択するという疑問が生じました。 MySQLは手続き型言語の未開発のためすぐに衰退し、選択はPostgreSQLに落ちました。
このプロジェクトと次のプロジェクトに取り組みながら、データベース開発者の観点からOracleと比較したPostgreSQLの主観的なプラスとマイナスのリストを作成しました。 あなたの注意を喚起します。
PostgreSQL対Oracle
プロ:
- 擬似型シリアル -MySQLのauto_incrementの最高の機能とOracleのシーケンスを組み合わせます。
- 純粋なSQLで関数を作成できます 。 たとえば、追加されたばかりの値の識別子を返す、戻り値を持つ1つの更新で構成される関数。 データが選択され、その後返される変数の明示的な宣言を取り除くことができます。
- selectをリクエストとして使用できるだけでなく、挿入、更新、削除、および再帰的に実行できる(Oracle connect byを置き換える)ことのできるすばらしい方法です。 さらに、Oracleマルチテーブルのinsert allを置き換えます。
- レベル<nによるデュアルコネクトからの選択レベルのような倒錯の代わりにGenerate_series
- 非常に強力なデータ整合性制御メカニズムは別名CONSTRAINTSです。たとえば、EXCLUDEを使用すると、新しい行(トリガーを記述する必要がある場合)、REFERENCES(外部キー)を挿入するときにOTHER行のトリッキーなチェックを行うことができます。 たとえば、カスケードが削除されるときにconstnameがtablenameを参照すると、親が削除されたときに関連レコードが削除されます。
- 素晴らしいが、潜在的に危険な(トリガーのような)ルールシステム( RULES )により、サーバーに送信されたリクエストテキストを置き換えることができます。 これにより、たとえば、 VIEWが実装されます。
- インデックスを定義する便利なWHEREセクションを使用すると、decode(status、1,1、null)= 1のような機能インデックスと読み取り不可能な条件を作成することなく、インデックスのサイズを縮小できます。
- OFFSETでLIMITを実行し、rownum、ソート、およびサブクエリでqueを避けます。
- オラクルの乾燥と極悪さだけでなく、細心の注意を払った快適なドキュメント。
短所:
- HFの本文をエスケープする必要性などの不快な構文の時代錯誤、たとえば次のように:
function test() returns void as $$ begin end; $$ language plpgsql;
perform, :
perform my_proc(); my_proc(); - ( ).
- , (, cron).
- packages . , .
- +parallel ( ) ETL DWH- . — .
- MERGE.
- . , commit rollback .
- , . . , , Oracle.
DBA, , , . .
? PostgreSQL , — .