व्याख्या है, मैनुअल के अनुसारए> :
DO
. का मुख्य भाग स्टेटमेंट एक डॉलर-उद्धृत स्ट्रिंग है। तो स्ट्रिंग के अंदर कोई इंटरपोलेशन नहीं।
चूंकि यह एक शाब्दिक स्ट्रिंग होना चाहिए, आप फ्लाई पर स्ट्रिंग्स को भी जोड़ नहीं सकते हैं। मैनुअल:
लेकिन आप स्ट्रिंग को जोड़ सकते हैं और फिर उसे निष्पादित कर सकते हैं।
बोल्ड जोर मेरा। आपको बस उद्धरण सही करना है:
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=#
लेकिन मैं इसके बजाय एक (अस्थायी) फ़ंक्शन बनाउंगा और मान को पैरामीटर के रूप में पास करूंगा (जहां psql इंटरपोलेशन काम करता है)। dba.SE पर इस संबंधित उत्तर में विवरण: