Förklaringen är enligt manualen :
Brödtexten i DO
uttalande är en sträng som noteras i dollar. Så ingen interpolation inuti strängen.
Eftersom det måste vara en bokstavlig sträng kan du inte heller sammanfoga strängar i farten. Handboken:
Men du kan sammanfoga strängen och sedan köra den.
Djärv betoning min. Du måste bara göra rätt citat:
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=#
Men jag skulle hellre skapa en (tillfällig) funktion och skicka värdet som parameter (där psql-interpolation fungerar). Detaljer i detta relaterade svar på dba.SE: