PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden Sie die \set-Variable innerhalb des plpgsql-Deklarationsblocks

Die Erklärung lautet gemäß dem Handbuch :

Der Körper des DO Die Anweisung ist eine Zeichenfolge in Dollar-Anführungszeichen. Also keine Interpolation innerhalb des Strings.

Da es sich um eine wörtliche Zeichenfolge handeln muss, können Sie Zeichenfolgen auch nicht im laufenden Betrieb verketten. Das Handbuch:

Aber Sie können den String verketten und dann ausführen.

Fette Hervorhebung von mir. Sie müssen nur richtig zitieren:

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=#

Aber ich würde lieber eine (temporäre) Funktion erstellen und den Wert als Parameter übergeben (wo die psql-Interpolation funktioniert). Details in dieser verwandten Antwort auf dba.SE: