Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

1. Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 02/09/2020 - 09:56h

Prezados,

Preciso do seguinte:
psql -U usuario -p 5432 -h localhost -d banco -v VAR=algumacoisa < Arquivo.sql 


Onde Arquivo.sql contém algo como:

DO LANGUAGE plpgsql $$
DECLARE
my_schema RECORD;
var_ext varchar := VAR;
BEGIN
FOR my_schema IN
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name IN ('public', var_ext)
LOOP
IF my_schema.schema_name = 'public'
THEN
EXECUTE 'ALTER SCHEMA public RENAME TO public_old;';
ELSE
EXECUTE 'ALTER SCHEMA ' || my_schema.schema_name ||
' RENAME TO ' || my_schema.schema_name ||_old' ';
END IF;
END LOOP;
END
$$;


Não estou conseguindo fazer com que a variável externa VAR seja reconhecida quando utilizo bloco anônimo (DECLARE). Lembrando que ela existe pois foi populada pelo psql -v, portanto VAR=algumacoisa . Eu não quero criar uma procedure ou uma função pois já possuo diversos arquivos .SQL semelhantes ao do exemplo acima, porém que fazem outras coisas e alterar todos eles seria oneroso. O pior é que eu sei que tem como fazer do jeito proposto pois o resultado do teste a seguir funcionou: ao invés do bloco de código acima, peguei o Arquivo.sql e em seu conteúdo coloquei select * from schema.tabela where coluna = :VAR ;
Desse jeito (sem utilizar bloco de código pgsql) :VAR foi corretamente substituída por "algumacoisa". Mas utilizando bloco anônimo não funciona.

OBJETIVO: Fazer funcionar em bloco anônimo SEM PRECISAR criar procedures e/ou funções, estando apenas os blocos anônimos presentes dentro de arquivos SQL que receberão variáveis externas como parâmetro.

Alguém saberia me ajudar?


  


2. Re: Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 07/09/2020 - 21:52h

Alguém ?


3. Re: Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

Afonso T Freitas
atf

(usa openSUSE)

Enviado em 16/09/2020 - 08:34h

Não sei vai dar certo mas, tenta trocar "var_ext varchar := VAR;" por "var_ext ALIAS FOR $1"

LinuxUser#142898


4. Re: Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 16/09/2020 - 10:28h

Infelizmente não deu certo amigo.


5. Re: Como referenciar uma variável externa em um bloco anônimo que foi recebida através do psql -v VAR=va

Afonso T Freitas
atf

(usa openSUSE)

Enviado em 16/09/2020 - 11:31h

Creio que o parâmetro "--var" é apenas para o "psql" e não é repassado para a função.

LinuxUser#142898






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts