web-dev-qa-db-ja.com

Greenplumは動的SQLをサポートしていますか?

PostgreSQLはexecute ... usingオプションを実装して、パラメーターを動的SQLに渡します。私が知る限り、この機能はバージョン8.4で導入されました。バージョン8.2でPostgreSQLからフォークされたGreenplumを使用しているため、この機能はありません。

GreenplumまたはPostgreSQL8.2で同じことを行う他の方法はありますか?

4
PhilHibbs

はっきりとはわかりませんが、 CREATE FUNCTION ドキュメント:

langname関数が実装されている言語の名前。SQL、C、内部、またはユーザー定義の手続き型言語の名前の場合があります。 Greenplum Databaseでサポートされている手続き型言語については、CREATELANGUAGEを参照してください。

順番に、参照された場所は言います

PL/pgSQL言語はデフォルトでGreenplumデータベースにインストールされます。

EXECUTE ... USINGはPL/pgSQL機能であるため、唯一の問題はそれがどのPostgreSQLバージョンからのものであるかです。ドキュメントは8.2を指しています-そしてこのようにあなたは運が悪いように見えます。

Greenplumサポートに連絡して明確な回答を得ましたが、回答が得られませんでした。

その構造の欠如を回避することに関しては、あなたは明らかにあなたが望むどんなSQL文字列も一緒に連結してそれを実行することができます。渡された値を正しく引用し、SQLインジェクションを回避するように注意してください。

5
dezso

Dezsoによって言及された保存された関数を使用することにより、回避策を使用できます。

CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
    EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;
0
kelvien