De uitleg is, volgens de handleiding :
De hoofdtekst van de DO
statement is een tekenreeks tussen aanhalingstekens in dollars. Dus geen interpolatie binnen de string.
Omdat het een letterlijke string moet zijn, kun je strings ook niet on-the-fly aaneenschakelen. De handleiding:
Maar je kunt de string samenvoegen en dan uitvoeren.
Vetgedrukte nadruk van mij. Je hoeft alleen maar het citaat goed te krijgen:
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=#
Maar ik zou liever een (tijdelijke) functie maken en de waarde doorgeven als parameter (waarbij psql-interpolatie werkt). Details in dit gerelateerde antwoord op dba.SE: