PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 13.0 » Internes » Catalogues système » pg_class

51.11. pg_class

Le catalogue pg_class liste les tables, et à peu près tout ce qui contient des colonnes ou ressemble de près ou de loin à une table. Cela inclut les index (mais il faut aussi aller voir dans pg_index), les séquences (mais voir aussi pg_sequence), les vues, les vues matérialisées, les types composites et les tables TOAST ; voir relkind. Par la suite, lorsque l'on parle de « relation », on sous-entend tous ces types d'objets. Les colonnes ne sont pas toutes significatives pour tous les types de relations.

Tableau 51.11. Colonnes de pg_class

Type

Description

oid oid

Identifiant de ligne

relname name

Nom de la table, vue, index, etc.

relnamespace oid (référence pg_namespace.oid)

OID du namespace qui contient la relation.

reltype oid (référence pg_type.oid)

OID du type de données qui correspond au type de ligne de la table, s'il y en a un. 0 pour les index qui n'ont pas d'entrée dans pg_type.

reloftype oid (référence pg_type.oid)

Pour les tables typées, l'OID du type composite sous-jacent. Sinon, 0 dans tous les autres cas.

relowner oid (référence pg_authid.oid)

Propriétaire de la relation.

relam oid (référence pg_am.oid)

S'il s'agit d'une table ou d'un index, méthode d'accès utilisée (B-tree, hash, etc.)

relfilenode oid

Nom du fichier disque de la relation ; zéro signifie que c'est une relation « mapped » dont le nom de fichier est déterminé par un statut de bas niveau.

reltablespace oid (référence pg_tablespace.oid)

Le tablespace dans lequel est stocké la relation. Si 0, il s'agit du tablespace par défaut de la base de données. (Sans intérêt si la relation n'est pas liée à un fichier disque.)

relpages int4

Taille du fichier disque, exprimée en pages (de taille BLCKSZ). Ce n'est qu'une estimation utilisée par le planificateur. Elle est mise à jour par les commandes VACUUM, ANALYZE et quelques commandes DDL comme CREATE INDEX.

reltuples float4

Nombre de lignes de la table. Ce n'est qu'une estimation utilisée par le planificateur. Elle est mise à jour par les commandes VACUUM, ANALYZE et quelques commandes DDL comme CREATE INDEX.

relallvisible int4

Nombre de pages marquées entièrement visibles dans la carte de visibilité de la table. Ceci n'est qu'une estimation utilisée par le planificateur. Elle est mise à jour par VACUUM, ANALYZE et quelques commandes DDL comme CREATE INDEX.

reltoastrelid oid (référence pg_class.oid)

OID de la table TOAST associée à cette table. 0 s'il n'y en a pas. La table TOAST stocke les attributs de grande taille « hors ligne » dans une table secondaire.

relhasindex bool

Vrai si c'est une table et qu'elle possède (ou possédait encore récemment) quelque index.

relisshared bool

Vrai si cette table est partagée par toutes les bases de données du cluster. Seuls certains catalogues système (comme pg_database) sont partagés.

relpersistence char

p = table permanente, u = table non tracée dans les journaux de transactions, t = table temporaire

relkind char

r = table, i = index, S = séquence, t = table TOAST, v = vue, m = vue matérialisée, c = type composite, f = table externe, p = table partitionnée I = index partitionné

relnatts int2

Nombre de colonnes utilisateur dans la relation (sans compter les colonnes système). Il doit y avoir le même nombre d'entrées dans pg_attribute. Voir aussi pg_attribute.attnum.

relchecks int2

Nombre de contraintes de vérification (CHECK) sur la table ; voir le catalogue pg_constraint.

relhasrules bool

Vrai si la table contient (ou a contenu) des règles ; voir le catalogue pg_rewrite.

relhastriggers bool

Vrai si la table a (ou a eu) des triggers ; voir le catalogue pg_trigger

relhassubclass bool

Vrai si au moins une table ou un index hérite ou a hérité d'un enfant

relrowsecurity bool

Vrai si la table a la sécurité niveau ligne activée ; voir le catalogue pg_policy

relforcerowsecurity bool

Vrai si la sécurité niveau ligne (si activée) s'appliquera aussi au propriétaire de la table ; voir le catalogue pg_policy

relispopulated bool

Vrai si la relation est peuplée (ceci est vrai pour toutes les relations autres que certaines vues matérialisées)

relreplident char

Colonnes utilisées pour former une « identité de réplicat » pour les lignes : d = par défaut (clé primaire, si présente), n = rien, f = toutes les colonnes i = index avec indisreplident configuré (identique à rien si l'index utilisé a été supprimé)

relispartition bool

True si la table ou l'index est une partition

relrewrite oid (référence pg_class.oid)

Pour les nouvelles relations écrites lors d'une opération DDL qui requiert une réécriture de la table, cette colonne contient l'OID de la relation originale ; 0 sinon. Cet état est seulement visible en interne ; ce champ ne devrait jamais contenir autre chose que 0 pour une relation visible par l'utilisateur.

relfrozenxid xid

Tous les ID de transaction avant celui-ci ont été remplacés par un ID de transaction permanent (« frozen »). Ceci est utilisé pour déterminer si la table doit être nettoyée (VACUUM) pour éviter un bouclage des ID de transaction (ID wraparound) ou pour compacter pg_xact. 0 (InvalidTransactionId) si la relation n'est pas une table.

relminmxid xid

Tous les identifiants MultiXact avant celui-i ont été remplacés par un identifiant de transaction dans cette table. Ceci est utilisé pour tracer si la table a besoin d'être traitée par le VACUUM pour empêcher un bouclage des identifiants MultiXact ou pour permettre à pg_multixact d'être réduits. Cette colonne vaut zéro (InvalidTransactionId) si la relation n'est pas une table.

relacl aclitem[]

Droits d'accès ; voir Section 5.7 pour plus de détails.

reloptions text[]

Options spécifiques de la méthode d'accès, représentées par des chaînes du type « motclé=valeur »

relpartbound pg_node_tree

Si la table est une partition (voir relispartition), représentation interne de la limite de la partition


Plusieurs des drapeaux booléens dans pg_class sont maintenus faiblement : la valeur true est garantie s'il s'agit du bon état, mais elle pourrait ne pas être remise à false immédiatement quand la condition n'est plus vraie. Par exemple, relhasindex est configurée par CREATE INDEX mais n'est jamais remise à false par DROP INDEX. C'est VACUUM qui le fera relhasindex s'il découvre que la table n'a pas d'index. Cet arrangement évite des fenêtres de vulnérabilité et améliore la concurrence.