PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Passa un nome di schema e un nome di tabella in modo dinamico in FROM in una query di selezione in Postgres

Non hai bisogno di quelle variabili locali per lo schema e la tabella. Usa l'opzione format per costruire le query e EXECUTE per eseguirlo in modo dinamico

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 vuoi restituire il risultato di una query dinamica puoi utilizzare

RETURNS TABLE opzione e quindi fare RETURN QUERY EXECUTE per restituire i risultati della query.