2014-07-04 7 views
5

Ho un database Postgres con diverse tabelle che ereditano da un altro. Posso SELECT dalla tabella padre per ottenere risultati da tutti i suoi figli, ma ho bisogno di ottenere il nome della tabella da cui ogni risultato proviene.Ottenere il nome della tabella di origine di una riga quando si esegue una query sul padre ereditato da

Il metodo trovato here non funziona poiché sto interrogando solo l'una tabella e non conosco quali bambini saranno nei risultati in anticipo.

risposta

10

per identificare la tabella di una riga particolare vive, utilizzare il tableoid , come hai già trovato te stesso.
Un cast per regclass recupera il nome effettivo, automaticamente qualificato per schema se necessario con lo search_path corrente.

SELECT *, tableoid::regclass::text AS table_name 
FROM master.tbl 
WHERE <some_condition>; 

Più:

+0

Non troppo interessati nello schema in questo momento, ma il casting è una bella idea. Riduce leggermente la query. – ltab

0

Questa risposta viene fornita nella documentazione PostgreSQL, nello section on inheritance. Si può utilizzare il tableoid colonna nascosta della tabella con relname da pg_class per aggiungere una colonna contenente i nomi di tabella per il risultato, come mostrato:

SELECT t.*, p.relname FROM table t, pg_class p WHERE t.tableoid = p.oid; 
Problemi correlati