sql >> データベース >  >> RDS >> PostgreSQL

Postgresクエリウィンドウのパラメータを使用してアドホックSQLをテストする方法

    さまざまなオプション。

    純粋なSQLで「変数」を持つようにCTEにパラメータを指定します :

    WITH var(lastname) AS (SELECT 'Troy'::varchar(16))
    SELECT *
    FROM   users, var v
    WHERE  lastname = v.lastname;

    これはすべてで機能します クエリ。
    CTEvar以降 単一行を保持します CROSS JOINを追加しても安全です FROM句の最後-明示的な結合構文はコンマの前にバインドされるため、実際にはコンマの後に追加する短い形式が最適な場合があります。追加のテーブルエイリアスv 構文をさらに短縮するためのオプションです。

    または CTEなしでより安い。ところで、なぜvarchar(16)textを使用するだけです :

    SELECT *
    FROM   users
    JOIN  (SELECT 'Troy'::text) var(lastname) USING (lastname)
    WHERE  lastname = var.lastname;
    

    または 一時テーブルを使用する すべてに対して同様の役割を果たす 同じセッション内のクエリ。一時テーブルはセッションの終了とともに消滅します。

    CREATE TEMP TABLE var AS
    SELECT text 'Troy' AS lastname;
    
    ANALYZE var;  -- temp tables are not covered by autovacuum
    
    SELECT * FROM users JOIN var USING (lastname);
    
    • 一時テーブルとautovacuumについて

    または DOを使用できます @Houariのようなステートメントが提供されているか、ここに示されています:

    • PostgreSQLは関数の外部をループします。それは可能ですか?

    DOから値を返すことはできないことに注意してください ステートメント。 (RAISE ...を使用できます ただし、SELECTは使用できません。 plpgsqlにターゲットなし-DOのデフォルトの手続き型言語 声明。 SELECTを置き換えます PERFORMを使用 結果を破棄します。

    または カスタマイズされたオプションを使用できます 、postgresql.confで設定できます グローバルに表示される

    または セッションの期間中、同じセッションでのみ表示されるようにセッションに設定します :

    SET my.lastname = 'Troy';
    

    変数名は必須 ドットを含めます。 textに制限されています この方法ではデータ型として使用できますが、任意のデータ型をtextとして表すことができます。 ...

    current_setting('my.lastname')を使用できます 値の式として。必要に応じてキャストします。例:current_setting('my.json_var')::json ...

    または SET LOCALを使用します 現在のトランザクションの間だけ効果が持続するようにします 。参照:

    • ユーザーIDをPostgreSQLトリガーに渡す

    または 小さなIMMUTABLEを使用できます 機能 グローバルとして 特権ユーザーのみが操作できる永続化された変数。参照:

    • PostgreSQLクエリで名前付き定数を定義する方法はありますか?

    または クライアントとしてpsqlを使用する場合は、\setを使用します または\gset メタコマンドと変数置換。



    1. OracleDataReader.Readメソッドのタイムアウト

    2. R12.2のフォワードクロスエディショントリガー

    3. 複数のオプションを1つのテーブルに保存するにはどうすればよいですか?

    4. PostgreSQLのORDERBY句でALIASを使用するにはどうすればよいですか?