7

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 to get the name of the table that each result originates from.

The method found here does not work since I am only querying the one table, and do not know which children will be in the results ahead of time.

Community
  • 1
  • 1
ltab
  • 267
  • 2
  • 10

2 Answers2

17

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:

Erwin Brandstetter
  • 605,456
  • 145
  • 1,078
  • 1,228
  • Not too interested in the schema right now, but the casting is a nice idea. Shortens the query a bit. – ltab Jul 08 '14 at 00:01
0

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;
ltab
  • 267
  • 2
  • 10