sql >> Base de Datos >  >> RDS >> PostgreSQL

use \set variable dentro del bloque de declaración plpgsql

La explicación es, según el manual :

El cuerpo del DO declaración es una cadena cotizada en dólares. Así que no hay interpolación dentro de la cadena.

Dado que debe ser una cadena literal, tampoco puede concatenar cadenas sobre la marcha. El manual:

Pero puede concatenar la cadena y luego ejecutarla.

Énfasis en negrita mío. Solo tienes que citar bien:

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

Pero preferiría crear una función (temporal) y pasar el valor como parámetro (donde funciona la interpolación psql). Detalles en esta respuesta relacionada en dba.SE: