説明は、マニュアルによると :
DO
の本文 ステートメントはドルで引用された文字列です。したがって、文字列内の補間はありません。
文字列である必要があるため、その場で文字列を連結することもできません。 マニュアル:
ただし、文字列を連結して実行することはできます。
大胆な強調鉱山。引用を正しくする必要があります:
test=# \set test 'some value'
test=# \set code 'DECLARE v_test text := ' :'test' '; BEGIN RAISE NOTICE ''test var is: %'', v_test; END'
test=# DO :'code';
NOTICE: test var is: some value
DO
test=#
しかし、私はむしろ(一時的な)関数を作成し、その値をパラメーターとして渡します(psql補間が機能する場合)。 dba.SEに関するこの関連回答の詳細: