PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

usa \set variabile all'interno del blocco plpgsql

La spiegazione è secondo il manuale :

Il corpo del DO statement è una stringa tra virgolette. Quindi nessuna interpolazione all'interno della stringa.

Poiché deve essere una stringa letterale, non è possibile concatenare le stringhe al volo. Il manuale:

Ma puoi concatenare la stringa e quindi eseguirla.

Enfasi in grassetto mio. Devi solo ottenere la quotazione giusta:

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

Ma preferirei creare una funzione (temporanea) e passare il valore come parametro (dove funziona l'interpolazione psql). Dettagli in questa risposta correlata su dba.SE: