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

Consulta dinâmica UNION ALL no Postgres


Estas são apenas diretrizes gerais que você precisa trabalhar nos detalhes, especialmente na sintaxe.

Você precisa criar um procedimento de armazenamento

Crie um loop verificando information_schema.tables filtre pelos nomes de tabela que você deseja
DECLARE    
    rec record;
    strSQL text;
BEGIN

Em seguida, crie um strSQL com cada tabela
 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;