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

Passe um nome de esquema e um nome de tabela dinamicamente em FROM em uma consulta de seleção no Postgres


Você não precisa dessas variáveis ​​locais para esquema e tabela. Use a opção de formato para construir as consultas e EXECUTE para executá-lo dinamicamente
CREATE OR REPLACE FUNCTION xx.fn_build_test_(
 IN p_var_archive_schema character varying,
 IN  p_var_archive_table character varying )
 RETURNS record AS
 $BODY$
 DECLARE
  l_var_test VARCHAR[];

 BEGIN

 SELECT  array
  ( SELECT TO_CHAR(column_name,'YYYYMMDD')
    FROM "test_table"
   WHERE col1 = 1
   ) INTO l_var_test;

   EXECUTE format (
     'select col_name FROM %I.%I',
         p_var_archive_schema,p_var_archive_table) 
      --INTO rec_variable;
END;
$BODY$
LANGUAGE plpgsql
VOLATILE SECURITY INVOKER; 

Se você deseja retornar o resultado de uma consulta dinâmica, você pode usar

RETURNS TABLE opção e, em seguida, faça RETURN QUERY EXECUTE para retornar os resultados da consulta.