pg_class
Le catalogue pg_class
décrit les tables, et
les autres objets qui contiennent des colonnes ou ressemblent à
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 de
pg_class
ne sont pas toutes
significatives pour tous les types de relations.
Tableau 52.11. Colonnes de pg_class
Nom | Type | Références | Description |
---|---|---|---|
oid | oid | Identifiant de ligne (attribut caché ; doit être sélectionné explicitement) | |
relname | name | Nom de la table, vue, index, etc. | |
relnamespace | oid |
| OID du namespace qui contient la relation. |
reltype | 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 |
| Pour les tables typées, l'OID du type composite sous-jacent. Sinon, 0 dans tous les autres cas. |
relowner | oid |
| Propriétaire de la relation. |
relam | oid |
| S'il s'agit d'un index, OID de la 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 |
| 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 |
| 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 .
| |
relhasoids | bool | Vrai si un OID est engendré pour chaque ligne de la relation. | |
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
| |
rowsecurity | boolean |
| Vrai si la sécurité niveau ligne est activée sur la table |
relhassubclass | bool | Vrai si au moins une table hérite ou a hérité de la table considérée. | |
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 |
| 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 GRANT et REVOKE 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.