Pour automatiser cela, vous avez besoin de SQL dynamique
CREATE OR REPLACE FUNCTION f_multi_select()
RETURNS SETOF table1
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE
(
SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
FROM (SELECT tbl FROM tablenames ORDER BY id) sub
);
END
$func$;
Appel :
SELECT * FROM f_multi_select();
En supposant que toutes les tables partagent le même type de ligne, nous pouvons donc en choisir une pour définir le type de retour de la fonction.
J'ai lancé une sous-requête avec ORDER BY
- dans le cas où l'ordre des tables est significatif.
Connexe :
- Renvoyer les lignes SETOF de la fonction PostgreSQL
- Nom de table en tant que Paramètre de la fonction PostgreSQL