PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête UNION ALL dynamique dans Postgres

Ce ne sont que des directives générales dont vous avez besoin pour travailler dans les détails, en particulier la syntaxe.

Vous devez créer une procédure de magasin

Créer une boucle vérifiant information_schema.tables filtrez les noms de table que vous voulez

DECLARE    
    rec record;
    strSQL text;
BEGIN

Créez ensuite un strSQL avec chaque table

 FOR rec IN SELECT table_schema, table_name
            FROM information_schema.tables                
 LOOP
     strSQL := strSQL || 'SELECT ogc_fid, wkb_geometry FROM ' || 
               rec.table_schema || '.' || rec.table_name || ' UNION ';
 END LOOP;

-- have to remove the last ' UNION ' from strSQL    

strSQL := 'SELECT  row_number() over (ORDER BY a.ogc_fid) AS qid,
         a.wkb_geometry AS geometry FROM (' || strSQL || ')';

EXECUTE strSQL;