PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

use a variável \set dentro do bloco de declaração do plpgsql


A explicação é, de acordo com o manual :

O corpo do DO instrução é uma string cotada em dólar. Portanto, não há interpolação dentro da string.

Como deve ser uma string literal, você também não pode concatenar strings em tempo real. O manual:

Mas você pode concatenar a string e depois executá-la.

Minha ênfase em negrito. Você só precisa acertar a citação:
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=#

Mas prefiro criar uma função (temporária) e passar o valor como parâmetro (onde funciona a interpolação do psql). Detalhes nesta resposta relacionada no dba.SE: