Get the name of a row's source table when querying the parent it inherits from

前端 未结 2 1737
面向向阳花
面向向阳花 2020-12-03 15:54

I have a Postgres database with several tables that inherit from one other. I can SELECT from the parent table to get results from all it\'s children, but need

相关标签:
2条回答
  • 2020-12-03 16:35

    To identify the source table of a particular row, use the tableoid, like you found yourself already.
    A cast to regclass retrieves the actual name, automatically schema-qualified where needed according to the current search_path.

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

    More:

    • Find out which schema based on table values
    • Select (retrieve) all records from multiple schemas using Postgres
    • How does the search_path influence identifier resolution and the "current schema"
    0 讨论(0)
  • 2020-12-03 16:41

    This is answered in the PostgreSQL documentation, in the section on inheritance. One can use the hidden tableoid column of the table along with relname from pg_class to add a column containing the table names to the result, as shown:

    SELECT t.*, p.relname FROM table t, pg_class p WHERE t.tableoid = p.oid;
    
    0 讨论(0)
提交回复
热议问题