1. ホーム
  2. sql

[解決済み] psqlでスクリプト変数を使用するには?

2022-04-25 04:02:17

質問

MS SQL Serverで、カスタマイズ可能な変数を使用するスクリプトを作成しました。

DECLARE @somevariable int  
SELECT @somevariable = -1

INSERT INTO foo VALUES ( @somevariable )

次に @somevariable は、特定の状況下で必要な値に応じて、実行時に設定します。スクリプトの一番上にあるので、見やすく、覚えやすい。

PostgreSQLクライアントで同じことをするにはどうすればよいでしょうか。 psql ?

解決方法は?

Postgresの変数は、例えば、......㊙セットコマンドで作成します。

\set myvariable value

... そして、例えば次のように代入することができます...

SELECT * FROM :myvariable.table1;

または...

SELECT * FROM table1 WHERE :myvariable IS NULL;

edit: psql 9.1では、変数は引用符で囲んで次のように展開することができます。

\set myvariable value 

SELECT * FROM table1 WHERE column1 = :'myvariable';

古いバージョンの psql クライアントで。

... この変数を条件付き文字列クエリの値として使用したい場合、例えば ...

SELECT * FROM table1 WHERE column1 = ':myvariable';

...の場合、上記ではうまくいかないので、変数自体に引用符を入れる必要があります。 代わりに、次のような変数を定義してください。

\set myvariable 'value'

しかし、私のように、既存の変数から文字列を作りたい場面に出くわした場合、そのコツはこうでした.

\set quoted_myvariable '\'' :myvariable '\''

これで、同じ文字列の引用符で囲まれた変数と囲まれていない変数の両方を持つことができます! そして、次のようなことができるようになります.

INSERT INTO :myvariable.table1 SELECT * FROM table2 WHERE column1 = :quoted_myvariable;