シンタックス シュガーと表現力に加えて、ランタイム効率の違いは何ですか。つまり、plpgsql は plpythonu や pljava よりも高速である可能性があります。それとも、それらはすべてほぼ等しいですか?
中程度のサイズのデータベース (約 1,000 万件のレコード) でほぼ重複している人物のレコードを検出するタスクに、ストアド プロシージャを使用しています。
シンタックス シュガーと表現力に加えて、ランタイム効率の違いは何ですか。つまり、plpgsql は plpythonu や pljava よりも高速である可能性があります。それとも、それらはすべてほぼ等しいですか?
中程度のサイズのデータベース (約 1,000 万件のレコード) でほぼ重複している人物のレコードを検出するタスクに、ストアド プロシージャを使用しています。
plpgsqlは、より優れた型の安全性を提供します。varcharとtext、またはint4とint8など、同様の型の2つの異なる列を使用して操作を実行する場合は、明示的なキャストを実行する必要があります。ストアドプロシージャにインデックスを使用させる必要がある場合、postgresでは型が結合条件間で正確に一致する必要があるため、これは重要です(編集:等価性チェックについても私は思います)。
他の言語でもこのための機能があるかもしれませんが、私はそれらを使用していません。いずれにせよ、これがあなたの調査のより良い出発点になることを願っています。
plpgsql は SQL と非常によく統合されています。ソース コードは非常にクリーンで読みやすいはずです。PLJava や PLPython などの SQL 言語では、SQL ステートメントを分離する必要があります。SQL は言語の一部ではありません。そのため、もう少しコードを書く必要があります。プロシージャに多くの SQL ステートメントがある場合、plpgsql プロシージャは簡潔で短く、少し高速である必要があります。プロシージャに SQL ステートメントがない場合、外部言語からのプロシージャの方が高速になる可能性がありますが、外部言語 (解釈) は初期化に時間がかかるため、単純なタスクの場合、SQL または plpgsql 言語のプロシージャの方が高速です。
外部言語は、ネットへのアクセスやファイルシステムへのアクセスなどの機能が必要な場合に使用されます - http://www.postgres.cz/index.php/PL/Perlu_-_Untrusted_Perl_%28en%29
私が知っていること-人々は通常、PL言語の組み合わせを使用します-(SQL、plpgsql、plperl)または(SQL、plpgsql、plpython)。
実際のテストを行わなくても、plpgsql は小さいため、他の言語よりもいくらか効率的であると期待できます。そうは言っても、関数が単純で SQL だけで記述できる場合、SQL 関数は plpgsql よりも高速である可能性が高いことを覚えておいてください。