Forklaringen er ifølge manualen :
Brødteksten af DO
statement er en streng, der er citeret i dollar. Så ingen interpolation inde i strengen.
Da det skal være en bogstavelig streng, kan du heller ikke sammenkæde strenge i farten. Manualen:
Men du kan sammenkæde strengen og derefter udføre den.
Fed fremhævelse min. Du skal bare få det rigtige 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 jeg vil hellere oprette en (midlertidig) funktion og videregive værdien som parameter (hvor psql-interpolation virker). Detaljer i dette relaterede svar på dba.SE: