# pg_class_internal

The system catalog table `pg_class_internal` catalogs tables and most everything else that has columns or is otherwise similar to a table (also known as *relations*). This includes indexes (see also [pg_index](./pg_index.md)), sequences, views, composite types, and TOAST tables. Not all columns are meaningful for all relation types.



Table 1. `pg_catalog.pg_class_internal`

| column           | type      | references        | description                                                  |
| :--------------- | :-------- | :---------------- | :----------------------------------------------------------- |
| `relrootoid` | oid |  | The root OID of the object. For partition table, this column store OID of root table of the child table |
| `relname`        | name      |                   | Name of the table, index, view, etc.                         |
| `relnamespace`   | oid       | pg_namespace.oid  | The OID of the namespace (schema) that contains this relation |
| `reltype`        | oid       | pg_type.oid       | The OID of the data type that corresponds to this table’s row type, if any (zero for indexes, which have no `pg_type` entry) |
| `relowner`       | oid       | pg_authid.oid     | Owner of the relation                                        |
| `relam`          | oid       | pg_am.oid         | If this is an index, the access method used (B-tree, Bitmap, hash, etc.) |
| `relfilenode`    | oid       |                   | Name of the on-disk file of this relation; `0` if none.      |
| `reltablespace`  | oid       | pg_tablespace.oid | The tablespace in which this relation is stored. If zero, the database’s default tablespace is implied. (Not meaningful if the relation has no on-disk file.) |
| `rellocidx` | smallint |  | index of filespace location array |
| `relpages`       | integer   |                   | Size of the on-disk representation of this table in pages (of 32K each). This is only an estimate used by the planner. It is updated by `ANALYZE`, and a few DDL commands. |
| `reltuples`      | real      |                   | Number of rows in the table. This is only an estimate used by the planner. It is updated by `VACUUM`, `ANALYZE`, and a few DDL commands. |
| `reltoastrelid`  | oid       | pg_class_internal.oid      | OID of the TOAST table associated with this table, `0` if none. The TOAST table stores large attributes “out of line” in a secondary table. |
| `reltoastidxid`  | oid       | pg_class_internal.oid      | For a TOAST table, the OID of its index. `0` if not a TOAST table. |
| `relhasindex`    | boolean   |                   | True if this is a table and it has (or recently had) any indexes. This is set by `CREATE INDEX`, but not cleared immediately by `DROP INDEX`. `VACUUM` will clear if it finds the table has no indexes. |
| `relisshared`    | boolean   |                   | True if this table is shared across all databases in the system. Only certain system catalog tables are shared. |
| `relkind`        | char      |                   | The type of object`r` = heap table, `i` = index, `S` = sequence, `v` = view, `c` = composite type, `t` = TOAST value, `c` = composite type, `u` = uncataloged temporary heap table |
| `relstorage`     | char      |                   | The storage mode of a table`a` = append-only, `h` = heap, `p` = append-only parquet, `v` = virtual, `x`= external table. |
| `relnatts`       | smallint  |                   | Number of user columns in the relation (system columns not counted). There must be this many corresponding entries in pg_attribute. |
| `relchecks`      | smallint  |                   | Number of check constraints on the table.                    |
| `reltriggers`    | smallint  |                   | Number of triggers on the table.                             |
| `relukeys`       | smallint  |                   | Unused                                                       |
| `relfkeys`       | smallint  |                   | Unused                                                       |
| `relrefs`        | smallint  |                   | Unused                                                       |
| `relhasoids`     | boolean   |                   | True if an OID is generated for each row of the relation.    |
| `relhaspkey`     | boolean   |                   | True if the table once had a primary key.                    |
| `relhasrules`    | boolean   |                   | True if table has rules.                                     |
| `relhassubclass` | boolean   |                   | True if table has (or once had) any inheritance children.    |
| `relfrozenxid`   | xid       |                   | All transaction IDs before this one have been replaced with a permanent (frozen) transaction ID in this table. This is used to track whether the table needs to be vacuumed in order to prevent transaction ID wraparound or to allow pg_clog to be shrunk. Zero (`InvalidTransactionId`) if the relation is not a table. |
| `relacl`         | aclitem[] |                   | Access privileges assigned by `GRANT` and `REVOKE`.          |
| `reloptions`     | text[]    |                   | Access-method-specific options, as “keyword=value” strings.  |