FT/ROSI/DPS/ISS/EMA Documentation PostgreSQL 7.4.8 Tableau 43-1. Catalogues système Nom du catalogue Contenu pg_aggregate fonctions d'agrégat pg_am méthodes d'accès aux index pg_amop opérateurs des méthodes d'accès pg_amproc procédures de support des méthodes d'accès pg_attrdef valeurs par défaut des colonnes pg_attribute colonnes des tables (<< attributs >>) pg_cast conversions de types de données (cast) pg_class tables, index, séquences (<< relations >>) pg_constraint contraintes de vérification, contraintes unique, contraintes de clés primaires, contraintes de clés étrangères pg_conversion informations de conversions de codage pg_database bases de données de l'installation PostgreSQL pg_depend dépendances entre objets de la base de données pg_description descriptions ou commentaires des objets de base de données pg_group groupes d'utilisateurs de la base de données pg_index informations supplémentaires des index pg_inherits hiérarchie d'héritage de tables pg_language langages pour écrire des fonctions pg_largeobject gros objets pg_listener support de notification asynchrone pg_namespace schémas pg_opclass classes d'opérateurs de méthodes d'accès aux index pg_operator opérateurs pg_proc fonctions et procédures pg_rewrite règles de réécriture de requêtes pg_shadow utilisateurs de la base de données pg_statistic statistiques de l'optimiseur de requêtes pg_trigger déclencheurs pg_type types de données 43.2. pg_aggregate Le catalogue pg_aggregate stocke les informations sur les fonctions d'agrégat. Une fonction d'agrégat est une fonction qui opère sur un ensemble de données (typiquement une colonne de chaque ligne qui correspond à une condition de requête) et retourne une valeur unique calculée à partir de toutes ces valeurs. Les fonctions d'agrégat classiques sont sum (somme), count (compteur) et max (plus grande valeur). Chaque entrée dans pg_aggregate est une extension d'une entrée dans pg_proc. L'entrée de pg_proc décrit le nom de l'agrégat, les types de données d'entrée et de sortie, et d'autres informations des fonctions ordinaires. Tableau 43-2. Les colonnes de pg_aggregate 27/05/2017 1/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description aggfnoid regproc pg_proc.oid OID pg_proc de la fonction d'agrégat aggtransfn regproc pg_proc.oid fonction de transition aggfinalfn regproc pg_proc.oid fonction finale (zéro s'il n'y en a pas) aggtranstype oid agginitval pg_type.oid Type de la donnée interne de transition (état) de la fonction d'agrégat Valeur initiale de la fonction de transition. C'est un champ texte qui contient la valeur initiale dans sa représentation externe en chaîne de caractères. Si la valeur est nulle, la valeur d'état de transition est initialement nulle. text 43.3. pg_am Le catalogue pg_am enregistre les informations sur les méthodes d'accès aux index. Il y a une ligne pour chaque méthode d'accès supportée par le système. Tableau 43-3. Colonnes de pg_am Nom Type Références Description amname name amowner int4 amstrategies int2 Nombre de stratégies d'opérateur pour cette méthode d'accès amsupport int2 Nombre de routines de support pour cette méthode d'accès Nom de la méthode d'accès pg_shadow.usesysid ID utilisateur du propriétaire (actuellement non utilisé) amorderstrategy int2 Zéro si l'index n'a pas d'ordre de tri, sinon, numéro de de stratégie de l'opérateur de stratégie qui décrit l'ordre de tri amcanunique bool Est-ce que la méthode d'accès supporte les index uniques ? amcanmulticol bool Est-ce que la méthode d'accès supporte les index multicolonnes ? amindexnulls bool Est-ce que la méthode d'accès supporte les entrées d'index nulles ? amconcurrent bool Est-ce que la méthode d'accès supporte les mises à jour concurrentes ? amgettuple regproc pg_proc.oid Fonction << prochaine ligne valide >> aminsert regproc pg_proc.oid Fonction << insérer cette ligne >> ambeginscan regproc pg_proc.oid Fonction << commencer un nouveau balayage >> amrescan regproc pg_proc.oid Fonction << redémarrer ce balayage >> amendscan regproc pg_proc.oid Fonction << arrêter ce balayage >> ammarkpos regproc pg_proc.oid Fonction << marquer la position actuelle dans le balayage >> amrestrpos regproc pg_proc.oid Fonction << restaurer une position de balayage sauvegardée >> ambuild regproc pg_proc.oid Fonction << construire un nouvel index >> ambulkdelete regproc pg_proc.oid Fonction de destruction en masse 27/05/2017 2/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description amvacuumcleanup regproc pg_proc.oid Fonction de nettoyage post-VACUUM amcostestimate Function d'estimation du coût d'un balayage d'index regproc pg_proc.oid Une méthode d'accès qui supporte les colonnes multiples (qui a amcanmulticol à vrai) doit supporter l'indexation des valeurs nulles dans les colonnes autres que la première, parce que l'optimiseur de requêtes supposera que le parcours d'index peut être utilisé pour les requêtes portant seulement sur la ou les première(s) colonne(s). Par exemple, supposons un index sur (a,b) et une requête contenant WHERE a = 4. Le système supposera que le parcours d'index peut être utilisé pour balayer les lignes pour lesquelles a = 4, ce qui est faux si l'index omet les lignes pour lesquelles b est nul. Il est cependant possible d'omettre les lignes dont la première colonne d'index est nulle. (GiST le fait). amindexnulls ne doit être mis à vrai que si la méthode d'accès indexe toutes les lignes, y compris toute combinaison de valeurs nulles. 43.4. pg_amop Le catalogue pg_amop stocke les informations sur les opérateurs associés aux classes d'opérateurs de méthodes d'accès aux index. Il y a une ligne pour chaque opérateur qui est membre d'une classe d'opérateurs. Tableau 43-4. Colonnes de pg_amop Nom amopclaid Type Références oid pg_opclass.oid Description La classe d'opérateur d'index de cette entrée. amopstrategy int2 Numéro de stratégie d'opérateur amopreqcheck bool Une entrée trouvée dans l'index doit être revérifiée. amopopr oid pg_operator.oid OID de l'opérateur 43.5. pg_amproc Le catalogue pg_amproc enregistre des informations sur les procédures de support associées aux classes d'opérateurs de méthodes d'accès. Il y a une ligne pour chaque procédure de support appartenant à une classe d'opérateur. Tableau 43-5. Colonnes de pg_amproc Nom Type amopclaid oid Références Description pg_opclass.oid La classe d'opérateurs d'index de cette entrée amprocnum int2 Numéro de procédure de support amproc OID de la procédure regproc pg_proc.oid 43.6. pg_attrdef Le catalogue pg_attrdef stocke les valeurs par défaut des colonnes. Les informations principales des colonnes sont stockées dans pg_attribute (voir plus loin). Seules les colonnes pour lesquelles une valeur par défaut est explicitement spécifiée (quand la table est créée ou quand une colonne est ajoutée) ont une entrée dans pg_attrdef. Tableau 43-6. Colonnes de pg_attrdef 27/05/2017 3/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type adrelid oid Références pg_class.oid Description La table de cette colonne. adnum int2 pg_attribute.attnum Numéro de la colonne adbin text Représentation interne de la valeur par défaut de la colonne adsrc text Une représentation lisible de la valeur par défaut 43.7. pg_attribute Le catalogue pg_attribute stocke les informations sur les colonnes des tables. Il y a exactement une ligne de pg_attribute pour chaque colonne de chaque table de la base de données. (Il y a aussi des attributs pour les index et pour d'autres objets. Voir pg_class.) Le terme attribut est équivalent à colonne et est utilisé pour des raisons historiques. Tableau 43-7. Colonnes de pg_attribute Nom Type attrelid oid attname name atttypid oid Références Description pg_class.oid La table de cette colonne Le nom de la colonne pg_type.oid Le type de données de cette colonne attstattarget int4 attstattarget contrôle le niveau de détail des statistiques accumulées pour cette colonne par ANALYZE. Une valeur de zéro indique qu'aucune statistique ne doit être collectée. Une valeur négative indique d'utiliser l'objectif de statistiques par défaut. Le sens exacte d'une valeur positive dépend du type de données. Pour les données scalaires, attstattarget est à la fois le nombre visé de << valeurs les plus courantes >> et le nombre visé d'histogrammes à créer. attlen int2 Une copie de pg_type.typlen pour le type de cette colonne. attnum int2 Le numéro de la colonne. Les colonnes ordinaires sont numérotées en commençant par 1. Les colonnes système, comme les oid, ont des numéros négatifs arbitraires. attndims int4 Nombre de dimensions, si la colonne est de type tableau, sinon 0. (Pour l'instant, le nombre de dimensions des tableaux n'est pas contrôlé, donc une valeur autre que zéro indique que << c'est un tableau >>.) attcacheoff int4 Toujours -1 sur disque, mais peut être mis à jour, en mémoire, pour mettre en cache l'emplacement de l'attribut dans la ligne. atttypmod int4 atttypmod des données spécifiques au type de données précisé lors de la création de la table (par exemple, la taille maximale d'une colonne de type varchar). Il est transmis à des fonctions spécifiques au type d'entrée de données et de vérification de taille. La valeur est généralement de -1 pour les types de données qui n'ont pas besoin de atttypmod. attbyval bool Une copie de pg_type.typbyval pour ce type de données. attstorage char Contient normalement une copie de pg_type.typstorage pour ce type de données. Pour les types de données TOASTables, cette valeur peut être modifiée après la création de la colonne pour contrôler la règle de stockage. attisset bool Vaut vrai si cet attribut est un ensemble. Dans ce cas, ce qui est 27/05/2017 4/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description réellement stocké dans l'attribut est l'OID d'une ligne dans le catalogue pg_proc. La ligne de pg_proc contient la chaîne de requête qui définit cet ensemble, c'est-à-dire la requête à exécuter pour obtenir l'ensemble. Donc, atttypid (voir plus haut) fait référence au type de données retourné par cette requête mais la taille réelle de cet attribut est celle d'un oid. --- Au moins en théorie. Tout cela est probablement cassé de nos jours. attalign char Contient une copie de pg_type.typalign pour le type de cette colonne. attnotnull bool Indique une contrainte de colonne non nulle. Il est possible de changer cette colonne pour activer ou désactiver cette contrainte. atthasdef bool Indique que cette colonne a une valeur par défaut. Dans ce cas, il y aura une entrée correspondante dans le catalogue pg_attrdef pour définir cette valeur. attisdropped bool Indique que cette colonne a été supprimée et n'est plus valide. Une colonne supprimée est toujours présente physiquement dans la table, mais elle est ignorée par l'analyseur de requête et ne peut être accédée en SQL. attislocal bool Cette colonne est définie localement dans la relation. Notez qu'une colonne peut être définie localement et héritée simultanément. attinhcount int4 Nombre d'ancêtres directs de cette colonne. Une colonne qui a un nombre d'ancêtres différent de zéro ne peut être supprimée ni renommée. 43.8. pg_cast Le catalogue pg_cast stocke les chemins de conversion de type de donnée, qu'ils soient par défaut ou définis avec la commande CREATE CAST. Tableau 43-8. Colonnes de pg_cast Nom Type Références Description castsource oid pg_type.oid OID du type de données source casttarget oid pg_type.oid OID du type de données en sortie castfunc oid OID de la fonction à utiliser pour faire cette conversion. Vaut Zéro si pg_proc.oid les types de données sont binairement compatibles (c'est-à-dire si aucune opération n'est nécessaire pour effectuer la transformation). castcontext char Indique dans quel contexte la conversion peut être utilisée. e si seules les conversions explicites sont autorisées (avec CAST, :: ou la syntaxe d'appel de fonction). a si les conversions implicites lors de l'affectation à une colonne sont autorisées, en plus des conversions explicites. i si les conversions implicites dans les expressions sont autorisées en plus des autres cas. 43.9. pg_class Le catalogue pg_class catalogue les tables, et à peu près tout ce qui a des colonnes ou qui 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, les 27/05/2017 5/27 841050908 FT/ROSI/DPS/ISS/EMA vues, et certaines sortes de relations spéciales ; voir relkind. Par la suite, lorsque l'on parle de << relation >>, on parle de tous ces types d'objets. Toutes les colonnes n'ont pas un sens pour tous les types de relations. Tableau 43-9. Colonnes de pg_class Nom Type Références Description relname name relnamespace oid pg_namespace OID de l'espace de noms qui contient cette relation. .oid reltype oid OID du type de données qui correspond à cette table, pg_type .oid s'il y en a un. Zéro pour les index qui n'ont pas d'entrée dans pg_type. relowner int4 pg_shadow .usesysid Propriétaire de la relation. relam oid pg_am .oid Si c'est un index, OID de la méthode d'accès utilisée (B-tree, hash, etc.) relfilenode oid Nom du fichier disque de cette relation ; 0 s'il n'y en a pas. relpages int4 Taille du fichier disque, exprimée en pages (de taille BLCKSZ). Ce n'est qu'une estimation utilisée par l'optimiseur. Elle est mise à jour par les commandes VACUUM, ANALYZE et CREATE INDEX. reltuples float4 Nombre de lignes de la table. Ce n'est qu'une estimation utilisée par l'optimiseur. Elle est mise à jour par les commandes VACUUM, ANALYZE et CREATE INDEX. reltoastrelid oid 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 de la ligne >> dans une table secondaire. reltoastidxid oid pg_class .oid Pour une table TOAST, OID de son index. 0 si ce n'est pas une table TOAST. Nom de la table, vue, index, etc. bool Vrai si cette table a (ou a eu récemment) un ou plusieurs index. Ce champ est mis à jour par CREATE INDEX, mais pas remis à faux immédiatement après DROP INDEX. VACUUM remet relhasindex à faux s'il s'aperçoit que la table n'a pas d'index. relisshared bool Vrai si cette table est partagée par toutes les bases de données du groupe de bases de données. Seuls certains catalogues système (comme pg_database) sont partagés. relkind char r = table ordinaire, i = index, S = séquence, v = vue, c = type composite, s = spécial, t = table TOAST. 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 sur la table ; voir le catalogue pg_constraint. reltriggers int2 Nombre de déclencheurs sur la table ; voir le catalogue pg_trigger. relukeys int2 Inutilisé. (Ce n'est pas le nombre de clés uniques de la table.) relhasindex 27/05/2017 6/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description relfkeys int2 Inutilisé. (Ce n'est pas le nombre de clés étrangères de la table.) relrefs int2 Inutilisé relhasoids bool Vrai si on génère un OID pour chaque ligne de la relation. relhaspkey bool Vrai si la table a (ou a eu) une clé primaire. relhasrules bool Vrai si la table a des règles ; voir le catalogue pg_rewrite. relhassubclass bool Vrai si au moins une table hérite de celle-ci. relacl Droits d'accès ; voir les descriptions de GRANT et REVOKE pour plus de détails. aclitem[] 43.10. pg_constraint Le catalogue pg_constraint stocke les vérifications, clés primaires, clés uniques et étrangères des tables (Les contraintes de colonnes ne sont pas traitées de manière particulière. Elles sont équivalentes à des contraintes de tables.) Les contraintes NOT NULL sont représentées dans le catalogue pg_attribute. Les contraintes de vérification de domaine sont aussi stockées ici. Tableau 43-10. Colonnes de pg_constraint Nom Type conname name connamespace oid contype char Références Description Nom de la contrainte (pas nécessairement unique !) pg_namespace .oid OID de l'espace de noms qui contient cette contrainte. c = contrainte de vérification, f = contrainte de clé étrangèret, p = contrainte de clé primaire, u = contrainte de clé unique condeferrable bool La contrainte est-elle différable ? condeferred bool La contrainte est-elle différée par défaut ? conrelid oid pg_class.oid Table à laquelle appartient la contrainte ; 0 si ce n'est pas une contrainte de table. contypid oid pg_type .oid Domaine auquel appartient la contrainte ; 0 si ce n'est pas une contrainte de domaine. confrelid oid pg_class .oid Si c'est une clé étrangère, la table référencée ; sinon 0 confupdtype char Code de l'action de mise à jour de la clé étrangère confdeltype char Code de l'action de suppression de clé étrangère confmatchtype char Type de vérification de clé étrangère conkey int2[] pg_attribute .attnum Si c'est une contrainte de table, liste des colonnes contraintes confkey int2[] pg_attribute .attnum Si c'est une clé étrangère, liste des colonnes référencées conbin text S'il s'agit d'une contrainte de vérification, représentation interne de l'expression consrc text S'il s'agit d'une contrainte de vérification, représentation compréhensible de l'expression 27/05/2017 7/27 841050908 FT/ROSI/DPS/ISS/EMA Note : consrc n'est pas mis à jour lors de modification d'objets référencés ; par exemple, il ne pistera pas les renommages de colonnes. Plutôt que se fier à ce champ, il est mieux d'utiliser pg_get_constraintdef() pour extraire la définition d'une contrainte de vérification. Note : pg_class.relchecks doit connaître le même nombre de contraintes de vérification pour chaque relation. 43.11. pg_conversion Le catalogue pg_conversion stocke des informations de conversion de codage. Voir la commande CREATE CONVERSION pour plus d'information. Tableau 43-11. Colonnes de pg_conversion Nom Type Références Description Nom de la conversion (unique au sein d'un espace de noms) conname name connamespace oid pg_namespace .oid OID de l'espace de nom qui contient cette conversion. conowner int4 pg_shadow .usesysid Propriétaire de la conversion conforencoding int4 ID du codage source contoencoding int4 ID du codage de destination conproc regproc pg_proc .oid Procédure de conversion condefault bool Vrai s'il s'agit de la conversion par défaut 43.12. pg_database Le catalogue pg_database stocke les informations sur les bases de données disponibles. Les bases de données sont créées avec la commande CREATE DATABASE. Consultez le Chapitre 18 pour avoir des détails sur la signification de certains paramètres. Contrairement à la plupart des catalogues système, pg_database est partagé entre toutes les bases de données d'un groupe de bases : il n'y a qu'une seule copie de pg_database par groupe, pas une par base. Tableau 43-12. Colonnes de pg_database Nom Type datname name datdba int4 encoding int4 Références Description Nom de la base de données pg_shadow .usesysid Propriétaire de la base, généralement l'utilisateur qui l'a créée Codage des caractères pour cette base de données. datistemplate bool Si ce champ vaut vrai, alors la base peut être utilisée dans la clause TEMPLATE de la commande CREATE DATABASE pour créer une nouvelle base qui sera un clone de celle-ci. datallowconn Si ce champ vaut faux, alors personne ne peut se connecter à cette base de données. Ceci permet d'empêcher toute altération de la base template0. bool datlastsysoid oid 27/05/2017 Dernier OID système de la base de données ; utile en 8/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description particulier pour pg_dump. xid Toutes les lignes insérées ou supprimées par des ID de transaction inférieurs à celui-ci ont été marquées << connu comme validé >> ou << connu comme annulé >> dans cette base de données. C'est utilisé pour déterminer quand l'espace des journaux de validation peut être réutilisé. xid Toutes les lignes insérées ou supprimées par des ID de transaction inférieurs à celui-ci ont été réétiquetés avec un ID de transaction permanent (<< gelé >> dans cette base de données. C'est utile pour vérifier si une base de données doit être rapidement nettoyée avec VACUUM pour éviter les problèmes créés par une remise à zéro du compteur de transaction. datpath text Si la base de données est stockées à un emplacement particulier, alors ce champ enregistre cet emplacement. Il s'agit soit d'une variable d'environnement, soit d'un chemin absolu, suivant la façon dont le champ a été saisi. datconfig text[] Valeurs par défaut de la session pour les variables modifiables en cours de fonctionnement. datacl aclitem[] Droits d'accès datvacuumxid datfrozenxid 43.13. pg_depend Le catalogue pg_depend enregistre les relations de dépendances entre les objets de la base de données. Cette information permet à la commande DROP de trouver quels autres objets doivent être supprimés par la commande DROP CASCADE ou au contraire empêchent la suppression dans le cas de DROP RESTRICT. Tableau 43-13. Colonnes de pg_depend Nom Type Références Description classid oid pg_class .oid objid oid toute colonne OID de l'objet dépendant OID objsubid int4 refclassid oid pg_class .oid refobjid oid toute colonne OID de l'objet référencé OID OID du catalogue système dans lequel l'objet dépendant se trouve. Pour une colonne de table, ce champ indique le numéro de colonne (les champs objid et classid se réfèrent à la table elle-même). Pour tous les autres types d'objets, cette colonne est à zéro. OID du catalogue système dans lequel l'objet référencé se trouve. refobjsubid int4 Pour une colonne de table, ce champ indique le numéro de colonne (les champs refobjid et refclassid se réfèrent à la table elle même). Pour tous les autres types d'objets, cette colonne est à zéro. deptype Code définissant la sémantique de cette relation de dépendance. Voir le texte. char Dans tous les cas, une entrée dans pg_depend indique que l'objet référence ne peut pas être supprimé sans supprimer aussi l'objet dépendant. Néanmoins, il y a des nuances, identifiées par deptype : 27/05/2017 9/27 841050908 FT/ROSI/DPS/ISS/EMA DEPENDENCY_NORMAL (n) Une relation normale entre des objets créés séparément. L'objet dépendant peut être supprimé sans affecter l'objet référencé. L'objet référencé ne peut être supprimé qu'en précisant l'option CASCADE, auquel cas l'objet dépendant est supprimé lui-aussi. Exemple : une colonne de table a une dépendance normale avec ses types de données. DEPENDENCY_AUTO (a) L'objet dépendant peut être supprimé séparément de l'objet de référence, et doit être automatiquement supprimé si l'objet référencé est supprimé, quel que soit le mode RESTRICT ou CASCADE. Exemple : une contrainte nommée sur une table est auto-dépendante sur la table et sera automatiquement supprimée en même temps que la table. DEPENDENCY_INTERNAL (i) L'objet dépendant a été créé comme une partie de l'objet référencé et n'est réellement qu'une partie de son implémentation interne. Un DROP de l'objet dépendant sera interdit (avec un message à l'utilisateur lui proposant de faire un DROP de l'objet référencé à la place). Une suppression de l'objet référencé sera propagé à l'objet dépendant que CASCADE soit précisé ou non. Exemple : un trigger qui est créé pour vérifier une contrainte de clé étrangère, est rendu dépendant de l'entrée de la contrainte dans pg_constraint. DEPENDENCY_PIN (p) Il n'y a pas d'objet dépendant ; ce type d'entrée signale que le système lui même dépend de l'objet référencé, et donc que l'objet ne doit jamais être supprimé. Les entrées de ce type sont créées uniquement par initdb. Les colonnes pour l'objet dépendant contiennent des zéros. D'autres types de dépendance pourraient apparaître dans le futur. 43.14. pg_description Le catalogue pg_description peut stocker des descriptions ou des commentaires optionnels pour chaque objet de la base de données. Les descriptions sont manipulées avec la commande COMMENT et lues avec les commandes \d de psql. Les descriptions de nombreux objets internes sont prédéfinies dans pg_description. Tableau 43-14. Colonnes de pg_description Nom Type Références Description objoid oid toute colonne OID de l'objet décrit. OID classoid oid pg_class .oid objsubid int4 description text OID du système catalogue dans lequel apparaît l'objet décrit. Pour un commentaire sur une table, le numéro de colonne. Les champs objoid et classoid font référence à la table elle-même. Pour tous les autres types de données, cette colonne est à zéro. Texte quelconque qui sert de description à cet objet. 43.15. pg_group 27/05/2017 10/27 841050908 FT/ROSI/DPS/ISS/EMA Le catalogue pg_group définit les groupes et stocke les utilisateurs qui en sont membres. Les groupes sont créés avec la commande CREATE GROUP. Consultez le Chapitre 17 pour des informations sur la gestion des droits des utilisateurs. Parce que les utilisateurs et les groupes sont définis pour tout le groupe de bases de données, pg_group est partagé par toutes les bases de données du groupe : il n'y a qu'une seule copie de pg_group par groupe de bases de données, et non pas une par base de données. Tableau 43-15. Colonnes de pg_group Nom groname Type Références name grosysid int4 grolist int4[] Description Nom du groupe Un numéro quelconque qui identifie ce groupe. pg_shadow .usesysid Tableau contenant les identifiants des utilisateurs de ce groupe 43.16. pg_index Le catalogue pg_index contient une partie des informations sur les index. Le reste se trouve essentiellement dans pg_class. Tableau 43-16. Colonnes de pg_index Nom Type Références Description indexrelid oid pg_class .oid OID de l'entrée dans pg_class pour cet index indrelid oid pg_class .oid OID de l'entrée dans pg_class de la table sur laquelle cet index porte. indkey Tableau comportant indnatts valeurs (et pas plus de INDEX_MAX_KEYS), qui précise les colonnes indexées. Par exemple, une valeur de 1 3 indique que pg_attribute la première et la troisième colonne de la table forment int2vector .attnum la clé de l'index. Une valeur de zéro dans le tableau indique que l'attribut d'index correspondant est une expression sur les colonnes de la table, et non pas une simple référence de colonne. indclass oidvector indnatts int2 Nombre de colonnes de l'index (duplique pg_class.relnatts) indisunique bool Vrai s'il s'agit d'un index unique. indisprimary bool Vrai si cet index est la clé primaire de la table. (indisunique doit toujours être vrai quand ce champ l'est aussi.) pg_opclass .oid Pour chaque colonne dans la clé d'index, ce champ contient l'OID de l'opérateur de classe à utiliser. Pour plus de détails, voir pg_opclass. indisclustered bool Vrai si la table était organisée en fonction de cet index. indexprs Arbres d'expressions (en représentation nodeToString()) pour les attributs d'index qui ne sont pas de simples références de colonnes. Il s'agit d'une liste avec un élément pour chaque entrée à zéro 27/05/2017 text 11/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description dans indkey. Nul si tous les attributs d'index sont de simples références. indpred Arbre d'expression (en représentation nodeToString()) pour les prédicats d'index partiels. Nul s'il ne s'agit pas d'un index partiel. text 43.17. pg_inherits Le catalogue pg_inherits enregistre l'information sur la hiérarchie d'héritage des tables. Tableau 43-17. Colonnes de pg_inherits Nom Type Références Description oid pg_class .oid OID de la table fille. inhparent oid pg_class .oid OID de la table mère. inhrelid inhseqno S'il y a plus d'un parent pour une table fille (héritage multiple), ce nombre indique dans quel ordre les colonnes héritées doivent être arrangées. Le compteur commence à 1. int4 43.18. pg_language Le catalogue pg_language enregistre les interfaces ou les langages avec lesquels vous pouvez écrire des fonctions ou des procédures stockées. Voir à CREATE LANGUAGE et dans le Chapitre 36 pour avoir plus d'information sur les gestionnaires de langages. Tableau 43-18. Colonnes de pg_language Nom lanname Type Références Description name Nom du langage (à préciser lorsque vous créez une fonction) lanispl bool Vaut faux pour les langages internes (comme SQL) et vrai pour les langages définis par l'utilisateur. Pour l'instant, pg_dump utilise ce champ pour déterminer quels langages doivent être sauvegardés mais cela sera peut-être un jour remplacé par un mécanisme différent. lanpltrusted bool Indique un langage sécurisé. Voir à la commande CREATE LANGUAGE ce que cela sous-entend. S'il s'agit d'un langage interne, cette colonne est sans importance. lanplcallfoid oid pg_proc .oid Pour les langages non-internes, ceci référence le gestionnaire de langage, qui est une fonction spéciale en charge de l'exécution de toutes les fonctions écrites dans ce langage. lanvalidator oid pg_proc .oid Ceci référence une fonction de validation de langage, en charge de vérifier la syntaxe et la validité des nouvelles fonctions lorsqu'elles sont créées. Voir à CREATE LANGUAGE pour plus d'informations sur les fonctions de validation. lanacl aclitem[] 27/05/2017 Droits d'accès 12/27 841050908 FT/ROSI/DPS/ISS/EMA 43.19. pg_largeobject Le catalogue pg_largeobject contient les données qui décrivent les << objets de grande taille >>. Un gros objet est identifié par un OID qui lui est affecté lors de sa création. Chaque objet de grande taille est coupé en segments ou << pages >> suffisamment petites pour être facilement stockées dans des lignes de pg_largeobject. La taille de données par page est définie par LOBLKSIZE, qui vaut actuellement BLCKSZ/4, soit habituellement 2 Ko). Tableau 43-19. Colonnes de pg_largeobject Nom loid Type Références oid Description Identifiant de l'objet de grande taille auquel appartient cette page. pageno int4 Numéro de cette page parmi son objet de grande taille, en partant de zéro. data Données effectivement stockées dans l'objet de grande taille. Il ne fait jamais plus de LOBLKSIZE mais peut faire moins. bytea Chaque ligne de pg_largeobject contient les données d'une page de l'objet de grande taille, en commençant à l'octet (pageno * LOBLKSIZE) de l'objet. Ceci permet un stockage économique : des pages peuvent manquer, et d'autres faire moins de LOBLKSIZE octets même si elles ne sont pas les dernières de leur objet. Les parties manquantes sont considérées comme des suites de zéro. 43.20. pg_listener Le catalogue pg_listener supporte les commandes LISTEN et NOTIFY. Un notifié (<< listener >>) crée une entrée dans pg_listener pour chaque nom de notification qu'il attend. Un notifieur parcourt pg_listener et met à jour chaque entrée pour montrer qu'une notification est arrivée. Le notifieur envoie aussi un signal (en utilisant le numéro de processus PID) enregistré dans la table pour prévenir le notifié. Tableau 43-20. Colonnes de pg_listener Nom Type Références Description relname name Nom de la notification. (Il ne doit pas spécialement correspondre à un nom de relation de la base. Le nom relname est historique.) listenerpid int4 PID du processus serveur qui a créé cette entrée. notification int4 Zéro si aucun événement n'est en attente pour ce notifié. Si un événement est en attente, ce champ contient le PID du processus serveur qui a envoyé cette notification. 43.21. pg_namespace Le catalogue pg_namespace stocke les espaces de noms. Un espace de noms est la structure sous-jacente des schémas SQL : chaque espace de noms peut avoir un ensemble séparé de relations, types, etc. sans qu'il y ait de conflit de noms. Tableau 43-21. Colonnes de pg_namespace Nom nspname Type name nspowner int4 27/05/2017 Références Description Nom de l'espace de noms pg_shadow .usesysid Propriétaire de l'espace de noms 13/27 841050908 FT/ROSI/DPS/ISS/EMA Nom nspacl Type Références aclitem[] Description Droits d'accès 43.22. pg_opclass Le catalogue pg_opclass définit les classes d'opérateurs de méthodes d'accès aux index. Chaque classe d'opérateur définit la sémantique pour les colonnes d'index d'un type particulier, pour une méthode d'accès particulière. Notez qu'il peut y avoir plusieurs classes d'opérateurs pour une combinaison donnée de type/méthode d'accès, ce qui permet de supporter différents comportements. Les classes d'opérateurs sont longuement décrites dans la Section 33.13. Tableau 43-22. Colonnes de pg_opclass Nom Type opcamid oid opcname name Références pg_am .oid Description Méthode d'accès à l'index pour lequel est la classe d'opérateur Nom de la classe d'opérateurs opcnamespace oid pg_namespace .oid Espace de noms de la classe d'opérateurs. opcowner int4 pg_shadow .usesysid Propriétaires de la classe d'opérateurs. opcintype oid pg_type .oid Type de données en entrée de la classe d'opérateurs. opcdefault bool opckeytype oid Vrai si la classe d'opérateurs est la classe par défaut pour opcintype pg_type .oid Type des données d'index ou zéro s'il s'agit du même que opcintype La plus grande partie des informations définissant une classe d'opérateurs n'est pas dans les lignes de pg_opclass mais dans les lignes correspondantes de pg_amop et pg_amproc. Ces lignes sont considérées comme faisant partie de la définition de classe d'opérateurs, un peu de la même façon qu'une relation est définie par une ligne unique de pg_class et par les lignes associées de pg_attribute et d'autres tables. 43.23. pg_operator Le catalogue pg_operator stocke les informations sur les opérateurs. Voir la commande CREATE OPERATOR et la Section 33.11 pour avoir plus de détails sur ces paramètres. Tableau 43-23. Colonnes de pg_operator Nom oprname Type Références name Description Nom de l'opérateur oprnamespace oid pg_namespace .oid OID de l'espace de nom qui contient cet opérateur. oprowner int4 pg_shadow .usesysid Propriétaire de l'opérateur oprkind char b = infix (<< les deux >>), l = prefix (<< gauche >>), r = postfix (<< droit >>) oprcanhash bool Cet opérateur supporte les jointures par découpage. 27/05/2017 14/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description oprleft oid pg_type .oid Type de l'opérande de gauche oprright oid pg_type .oid Type de l'opérande de droite oprresult oid pg_type .oid Type du résultat oprcom oid pg_operator .oid Commutateur de cet opérateur, s'il en existe un. oprnegate oid pg_operator .oid Négateur de cet opérateur, s'il en existe un. oprlsortop oid pg_operator .oid Si cet opérateur supporte les jointures par fusion (merge join), ce champ contient l'opérateur qui permet de trier le type de l'opérateur de gauche (L<L). oprrsortop oid pg_operator .oid Si cet opérateur supporte les jointures par fusion (merge join), ce champ contient l'opérateur qui permet de trier le type de l'opérateur de droite (R<R) oprltcmpop oid pg_operator .oid Si cet opérateur supporte les jointures par fusion (merge join), ce champ contient l'opérateur qui permet de comparer les types des opérandes de gauche et de droite(L<R). oprgtcmpop oid pg_operator .oid Si cet opérateur supporte les jointures par fusion (merge join), ce champ contient l'opérateur plus grand que qui compare les types d'opérandes de gauche et de droite (L>R). oprcode regproc pg_proc .oid Fonction qui implémente cet opérateur oprrest regproc pg_proc .oid Fonction d'estimation de sélectivité de restriction pour cet opérateur oprjoin regproc pg_proc .oid Fonction d'estimation de sélectivité de jointure pour cet opérateur Les colonnes inutilisées contiennent des zéros, par exemple oprleft vaut zéro pour un opérateur préfixe. 43.24. pg_proc Le catalogue pg_proc stocke les informations sur les fonctions (ou procédures). La description de CREATE FUNCTION et la Section 33.3 contiennent plus d'informations sur le sens de certaines colonnes. Cette table contient des données pour les fonctions d'agrégat comme pour les fonctions simples. Si proisagg est vrai, il devrait y avoir une ligne correspondante dans pg_aggregate. Tableau 43-24. Colonnes de pg_proc Nom proname Type Références name Description Nom de la fonction pronamespace oid pg_namespace OID de l'espace de noms auquel cette fonction appartient. .oid proowner int4 pg_shadow .usesysid Propriétaire de la fonction. prolang oid pg_language .oid Langage ou interface d'appel pour cette fonction proisagg bool La fonction est une fonction d'agrégat. prosecdef bool Si vrai, la fonction définit la sécurité (c'est-à-dire une fonction << setuid >>). 27/05/2017 15/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description proisstrict bool Si vrai, la fonction retourne NULL si un de ses arguments au moins est NULL. Dans ce cas, la fonction ne sera en fait pas appelée du tout. Les fonctions qui ne sont pas << strictes >> doivent être préparées à traiter des paramètres NULL. proretset bool Si vrai, la fonction retourne un ensemble (c'est-à-dire des valeurs multiples du type défini). provolatile char provolatile indique si le résultat de la fonction dépend uniquement de ses arguments ou s'il est affecté par des facteurs externes. Il vaut i pour les fonctions << immuables >>, qui donnent toujours le même résultat quand les paramètres entrés sont les mêmes. Il vaut s pour les fonctions << stables >>, dont le résultat (pour les mêmes paramètres d'entrée) ne change pas tout au long d'un balayage (de table). Il vaut v pour les fonctions << volatiles >>, dont le résultat peut varier à tout instant. (Utilisez v aussi pour les fonctions qui ont des effets de bord, afin que les appels à ces fonctions ne soient pas optimisés.) pronargs int2 Nombre d'arguments prorettype oid proargtypes oidvector pg_type .oid Tableau contenant les types de données des arguments de la fonction. prosrc text Ce champ indique au gestionnaire de fonctions la façon d'invoquer la fonction. Il peut s'agir du code source pour un langage interprété, d'un symbole lié, d'un nom de fichier ou de n'importe quoi d'autre, en fonction du langage ou de la convention d'appel. probin bytea Information supplémentaire sur la façon d'invoquer la fonction. Encore une fois, l'interprétation dépend du langage. proacl aclitem[] Droits d'accès pg_type .oid Type de données renvoyé prosrc contient le nom de la fonction en langage C (symbol lié) pour les fonctions compilées, aussi bien les fonctions standard que les fonctions chargées dynamiquement. Pour tous les autres types de langages, prosrc contient le code source de la fonction. probin est inutilisé, sauf pour les fonctions en C chargées dynamiquement, pour lesquelles il donne le nom de fichier de la bibliothèque partagée qui contient la fonction. 43.25. pg_rewrite Le catalogue pg_rewrite stocke les règles de réécriture pour les tables et les vues. Tableau 43-25. Colonnes de pg_rewrite Nom Type rulename name ev_class oid ev_attr int2 27/05/2017 Références Description Nom de la règle pg_class .oid Table sur laquelle porte cette règle. Colonne sur laquelle porte cette règle. Actuellement, cette colonne vaut toujours zéro pour indiquer qu'il s'agit de la table entière. 16/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type ev_type char Références Description Type d'évènement déclenchant la règle : 1 = SELECT, 2 = UPDATE, 3 = INSERT, 4 = DELETE is_instead bool Vrai s'il s'agit d'une règle INSTEAD (à la place de). ev_qual text Arbre d'expression (sous la forme d'une représentation nodeToString()) pour la condition qualifiant la règle. ev_action text Arbre de requête (sous la forme d'une représentation nodeToString()) pour l'action de la règle. Note : pg_class.relhasrules doit être vrai si une table a au moins une règle dans ce catalogue. 43.26. pg_shadow Le catalogue pg_shadow contient les informations sur les utilisateurs de la base de données. Le nom provient du fait que cette table ne doit pas être lisible par le public, vu qu'elle contient des mots de passe. pg_user est une vue accessible par tous sur pg_shadow qui masque le champ mot de passe. Chapitre 17 contient des informations détaillées sur les utilisateurs et la gestion des droits d'accès. Parce que les identités des utilisateurs sont globales au groupe de bases de données (cluster), pg_shadow est partagé par toutes les bases de données d'un groupe de bases de données : il n'y a qu'une seule copie de pg_shadow par groupe de bases de données, et non pas une par base de données. Tableau 43-26. Colonnes de pg_shadow Nom Type Références Description usename name Nom de l'utilisateur usesysid int4 Identifiant de l'utilisateur (numéro arbitraire utilisé pour référencer cet utilisateur). usecreatedb bool L'utilisateur a le droit de créer des bases de données. usesuper bool L'utilisateur est un super-utilisateur usecatupd bool L'utilisateur a le droit de modifier les catalogues système. (Même un super-utilisateur n'a pas le droit de le faire si cette colonne n'est pas vraie). passwd text Mot de passe valuntil abstime Date et heure d'expiration du mot de passe (utilisé seulement pour l'authentification par mot de passe). useconfig text[] Valeur par défaut de session pour les variables de configuration lors de l'exécution. 43.27. pg_statistic Le catalogue pg_statistic stocke des données statistiques sur le contenu de la base de données. Les entrées sont créées par ANALYZE, puis utilisées par l'optimiseur de requêtes. Il y a une entrée pour chaque colonne de table qui a été analysée. Notez que les données statistiques sont par définition des approximations, même si elles sont à jour. Comme des statistiques différentes seront appropriées pour des types de données différents, pg_statistic est prévu pour ne faire qu'un minimum de suppositions sur les types de statistiques qu'il stocke. Seules des 27/05/2017 17/27 841050908 FT/ROSI/DPS/ISS/EMA statistiques extrêmement générales (comme les valeurs NULL) ont des colonnes dédiées. Tout le reste est stocké dans des << emplacements >>, qui sont des groupes de colonnes associées dont le contenu est identifié par un numéro de code dans l'une des colonnes de l'emplacement. Pour plus d'information, voir src/include/catalog/pg_statistic.h. pg_statistic ne doit pas être lisible par le public car même les données statistiques peuvent être considérées comme sensibles. (Exemple : les valeurs maximales et minimales d'une colonne de salaire peuvent être assez intéressantes). pg_stats est une vue sur pg_statistic accessible à tous, qui n'expose que les informations sur ces tables qui sont accessibles à l'utilisateur courant. Tableau 43-27. Colonnes de pg_statistic Nom Type Références Description starelid oid pg_class .oid staattnum int2 pg_attribute Numéro de la colonne décrite. .attnum Table à laquelle la colonne décrite appartient. stanullfrac float4 Fraction des entrées de la colonne qui ont une valeur NULL. stawidth Taille moyenne stockée des entrées non nulles. int4 stadistinct float4 Nombre de valeurs distinctes non NULL dans la colonne. Une valeurs positive est le nombre réel de valeurs distinctes. Une valeur négative est le négatif d'une fraction du nombre de lignes dans la table (par exemple, une colonne dans laquelle les valeurs apparaissent environ deux fois en moyenne pourrait être représentée par stadistinct = 0.5). Une valeur à zéro indique que le nombre de valeurs distinctes est inconnu. stakindN Numéro de code indiquant quel type de statistiques est stocké dans << l'emplacement >> numéro N de la ligne de pg_statistic. staopN int2 oid pg_operator .oid Opérateur utilisé pour dériver les statistiques stockées dans << l'emplacement >> numéro N. Par exemple, un emplacement d'histogramme montrerait l'opérateur <, qui définit l'ordre de tri des données. stanumbersN float4[] Statistiques numériques du genre approprié pour << l'emplacement >> numéro N ou NULL si le type d'emplacement ne nécessite pas de valeurs numériques. stavaluesN Valeurs de données de la colonne du type approprié pour << l'emplacement >> numéro N ou NULL si le type d'emplacement ne stocke aucune valeur de données. Chaque valeur d'élément du tableau est en fait du type de données de la colonne spécifiée, si bien qu'il n'y a aucun moyen de définir ces colonnes autrement qu'avec le type anyarray (tableau quelconque). anyarray 43.28. pg_trigger Le catalogue pg_trigger stocke les informations sur les déclencheurs des tables. Voir la commande CREATE TRIGGER pour plus d'informations. Tableau 43-28. Colonnes de pg_trigger 27/05/2017 18/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références pg_class .oid Description tgrelid oid tgname name tgfoid oid tgtype int2 Masque de bits identifiant les conditions du déclencheur. bool Vrai si le déclencheur est activé. Ceci n'est pas vérifié de manière fiable partout où cela devrait, si bien que désactiver un déclencheur ne fonctionne pas de manière fiable. tgenabled Table sur laquelle porte le déclencheur Nom du déclencheur (doit être unique parmi les déclencheurs d'une table). pg_proc .oid Fonction à appeler tgisconstraint bool Vrai si le déclencheur implémente une contrainte d'intégrité référentielle. tgconstrname name Nom de la contrainte d'intégrité référentielle. tgconstrrelid oid tgdeferrable bool pg_class .oid Table référencée par une contrainte d'intégrité référentielle. Vrai si le déclencheur est différable. tginitdeferred bool Vrai si initialement le déclencheur est différé. tgnargs int2 Nombre de chaînes d'arguments passées à la fonction de déclencheur. tgattr int2vector Actuellement inutilisé. tgargs bytea Chaînes d'arguments à passer au déclencheur, chacune terminée par un NULL. Note : pg_class.reltriggers doit correspondre aux entrées de cette table. 43.29. pg_type Le catalogue pg_type stocke les informations sur les types de données. Les types de base (types scalaires) sont créés avec la commande CREATE TYPE. Un type composite est créé automatiquement pour chaque table de la base et représenter ainsi la structure des lignes de la table. Il est aussi possible de créer des types composites avec CREATE TYPE AS et des domaines avec CREATE DOMAIN. Tableau 43-29. Colonnes de pg_type Nom Type Références Description typname name typnamespace oid pg_namespace OID de l'espace de noms qui contient ce type. .oid typowner int4 pg_shadow .usesysid Nom du type Propriétaire du type typlen int2 Pour les types de taille fixe, typlen est le nombre d'octets de la représentation interne du type. Mais pour les types de longueur variable, typlen est négatif. -1 indique un type << varlena >> (qui a un attribut de longueur), -2 indique une chaîne C terminée par le caractère NULL. typbyval bool typbyval détermine si les routines internes passent une valeur de ce type par valeur ou par référence. typbyval 27/05/2017 19/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description doit être faux si typlen ne vaut pas 1, 2 ou 4 (ou 8 sur les machines dont le mot-machine est de 8 octets). Les types de longueur variable sont toujours passés par référence. Notez que typbyval peut être faux même si la longueur permettrait un passage par valeur ; c'est le cas pour le type float4, par exemple. char typtype vaut b pour un type de base, c pour un type composite (c'est-à-dire le type d'une ligne de table), d pour un domaine ou p pour un pseudo-type. Voir aussi typrelid et typbasetype. bool Vrai si le type est défini et faux s'il ne s'agit que d'un remplissage pour un type qui n'est pas encore défini. Lorsque typisdefined est faux, rien à part le nom du type, l'espace de noms et l'OID n'est fiable. char Caractère qui sépare deux valeurs de ce type lorsque le programme lit les valeurs d'un tableau en entrée. Notez que le délimiteur est associé au type d'élément du tableau, pas au type tableau. oid pg_class .oid S'il s'agit d'un type composite (voir typtype), alors cette colonne pointe vers la ligne de pg_class qui définit la table correspondante. Pour un type composite sans table, l'entrée dans pg_class ne représente pas vraiment une table, mais elle est néanmoins nécessaire pour trouver les lignes de pg_attribute liées au type. Zéro pour les types de base. typelem oid Si typelem ne vaut pas 0, alors il identifie une autre ligne de pg_type. Le type courant peut alors être utilisé comme un tableau contenant des valeurs de type typelem. Un << vrai >> type tableau a une longueur variable (typlen = -1), mais certains types de longueur fixe (typlen > 0) ont pg_type .oid aussi un typelem non nul, par exemple name et oidvector. Si un type de longueur fixe a un typelem, alors sa représentation interne doit être un certain nombre de valeurs de ce type typelem, sans autre donnée. Les types de données tableau de taille variable ont un en-tête défini par les sous-routines de tableau. typinput regproc pg_proc .oid Fonction de conversion en entrée (format texte). typoutput regproc pg_proc .oid Fonction de conversion en sortie (format texte). typreceive regproc pg_proc .oid Fonction de conversion en entrée (format binaire), ou 0 s'il n'y en a pas typsend regproc pg_proc .oid Fonction de conversion en sortie (format binaire), ou 0 s'il n'y en a pas typtype typisdefined typdelim typrelid typalign est l'alignement requis pour stocker une valeur de ce type. Cela s'applique au stockage sur disque aussi bien qu'à la plupart des représentations de cette valeur dans typalign char PostgreSQL. Lorsque des valeurs multiples sont stockées consécutivement, comme dans la représentation d'une ligne complète sur disque, un remplissage est inséré avant la donnée de ce type pour qu'elle commence à l'alignement 27/05/2017 20/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description spécifié. La référence de l'alignement est le début de la première donnée de la séquence. Les valeurs possibles sont : c = alignement char ce qui signifie qu'aucun alignement n'est nécessaire ; s = alignement short (deux octets sur la plupart des machines) ; i = alignement int (quatre octets sur la plupart des machines) ; d = alignement double (huit octets sur la plupart des machines, mais pas sur toutes). Note : Pour les types utilisés dans les tables système, il est indispensable que les tailles et alignements définis dans pg_type soient en accord avec la façon dont le compilateur disposera la colonne dans une structure représentant une ligne de table. typstorage indique, pour les types varlena (ceux pour lesquels typlen = -1), si le type est préparé pour le TOASTage et quelle stratégie par défaut doit être utilisée pour les attributs de ce type. Les valeurs possibles sont : p : La valeur doit être stockée normalement ; e : La valeur peut être stockée dans une relation << secondaire >> (si la relation en a une, voir typstorage pg_class.reltoastrelid) ; char m : La valeurs peut être stockée compressée sur place ; x : La valeurs peut être stockée compressée sur place ou stockée dans une relation << secondaire >>. Notez que les colonnes m peuvent aussi être déplacées dans une table de stockage secondaire, mais seulement en dernier recours (les colonnes e et x sont déplacées d'abord). typnotnull 27/05/2017 bool typnotnull représente une contrainte non NULL pour ce 21/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description type. Ceci n'est utilisé que pour les domaines. typbasetype oid S'il s'agit d'un domaine, (voir typtype), alors pg_type .oid typbasetype identifie le type sur lequel celui-ci est basé. Zéro s'il ne s'agit pas d'un domaine. Les domaines utilisent typtypmod pour enregistrer le typtypmod int4 typmod à appliquer à leur type de base (-1 si le type de base n'utilise pas de typmod). -1 si ce type n'est pas un domaine. typndims est le nombre de dimensions de tableau pour un domaine qui est un tableau (c'est-à-dire dont typndims int4 typbasetype est un type tableau ; le typelem du domaine correspondra au typelem du type de base). Zéro pour les types autres que les domaines tableaux. Si typdefaultbin n'est pas NULL, ce champ est la typdefaultbin text représentation nodeToString() d'une expression par défaut pour le type. Ceci n'est utilisé que pour les domaines. typdefault est NULL si le type n'a pas de valeur par défaut associée. Si typdefaultbin est non NULL, typdefault doit contenir une version lisible de typdefault text l'expression par défaut représentée par typdefaultbin. Si typdefaultbin est NULL et si typdefault ne l'est pas, alors typdefault est la représentation externe de la valeur par défaut du type, qui peut être passée à la fonction de conversion en entrée du type pour produire une constante. 43.30. Vues système En plus des catalogues système, PostgreSQL apporte un certain nombre de vues internes. Les vues système apportent un moyen simple et agréable d'accéder à des requêtes habituellement utilisées dans les catalogues systèmes. Certaines de ces vues donnent aussi accès à l'état du serveur interne. Tableau 43-30 indique les vues système décrites ici. Une documentation plus détaillée de chaque vue suit ceci. Il existe en plus des vues supplémentaires permettant d'accéder aux résultats du collecteur de statistiques elles sont décrites dans le Tableau 23-1. Le schéma information (Chapitre 32) fournit un autre ensemble de vues qui rejoignent les fonctionnalités des vues système. Comme le schéma information est en SQL standard alors que les vues décrites ici sont spécifiques à PostgreSQL, il est généralement mieux d'utiliser le schéma information si celui-ci apporte toutes les informations dont vous avez besoin. Sauf lorsque c'est noté, toutes les vues décrites ici sont en lecture seule. 27/05/2017 22/27 841050908 FT/ROSI/DPS/ISS/EMA Tableau 43-30. Vues système Nom de la vue But pg_indexes index pg_locks verrous actuellement contenus pg_rules règles pg_settings configuration pg_stats statistiques du planificateur pg_tables tables pg_user utilisateurs de la base de données pg_views vues 43.31. pg_indexes La vue pg_indexes fournit un accès à des informations utiles sur chaque index de la base de données. Tableau 43-31. Colonnes de pg_indexes Nom Type Références Description schemaname name pg_namespace.nspname nom du schéma contenant les tables et index tablename name pg_class.relname nom de la table concernant cet index indexname name pg_class.relname nom de l'index indexdef text définition de l'index (une commande de création reconstruite) 43.32. pg_locks La vue pg_locks fournit un accès aux informations concernant les verrous détenus par les transactions ouvertes à l'intérieur du serveur de bases de données. Voir le Chapitre 12 pour une discussion plus importante sur les verrous. pg_locks contient une ligne par objet verrouillable actif, mode de verrouillage demandé et transaction indiquée. Donc, le même objet verrouillable pourrait apparaître plusieurs fois si plusieurs transactions ont pris ou attendent des verrous sur celui-ci. Néanmoins, un objet qui n'est pas verrouillé n'apparaîtra pas du tout. Un objet verrouillé est soit une relation (c'est-à-dire une table) soit un identifiant de transaction. Notez que cette vue inclut seulement des verrous au niveau de la table, pas au niveau des lignes. Si une transaction attend un verrou ligne, il apparaîtra dans la vue en attente d'un identifiant de transaction du déteneur actuel du verrou. Tableau 43-32. Colonnes pg_locks Nom Type Références Description relation oid pg_class.oid OID de la relation verrouillée ou NULL si l'objet verrouillé est un identifiant de transaction database oid pg_database.oid OID de la base de données dans lequel la relation verrouillée existe ou zéro si la relation verrouillée est une 27/05/2017 23/27 841050908 FT/ROSI/DPS/ISS/EMA Nom Type Références Description table partagée globalement ou NULL si l'objet verrouillable est un identifiant de transaction transaction xid ID d'une transaction ou NULL si l'objet verrouillable est une relation pid integer Identifiant (PID) du processus serveur détenant ou attendant ce verrou mode text Nom du mode de verrou détenu ou attendu par ce processus (voir la Section 12.3.1) granted boolean vrai si le verrou est détenu, faux s'il est attendu granted est vrai sur une ligne représentant un verrou tenu par la session indiquée. Une valeur faux indique que cette session attend l'acquisition du verrou, ce qui implique qu'une autre session a choisi un mode de verrouillage conflictuel sur le même objet partageable. La session en attente dormira jusqu'à la relâche du verrou (ou jusqu'à ce qu'une situation de blocage soit détectée). Une session seule peut attendre d'acquérir au plus un verrou à la fois. Chaque transaction détient un verrou exclusif sur son identifiant de transaction toute la durée de son exécution. Si une transaction trouve nécessaire d'attendre spécifiquement une autre transaction, elle le fait en essayant d'acquérir un verrou partagé sur l'identifiant de l'autre transaction. Ceci sera couronné de succès seulement lorsque l'autre transaction termine et relâche son verrou. Quand la vue pg_locks est accédé, les structures de données du gestionnaire interne de verrous sont momentanément verrouillées et une copie est faite pour que la vue s'affiche. Ceci nous assure que la vue produise un ensemble consistant de résultats, tout en ne bloquant pas les opérations habituelles du gestionnaire de verrous plus longuement que nécessaire. Néanmoins, il peut y avoir des impacts sur les performances de la base de données si cette vue est lu fréquemment. pg_locks fournit une vue globale de tous les verrous du cluster de bases de données, et non pas seulement une vue de ceux de la base en cours. Bien que sa colonne relation peut être jointe avec pg_class.oid pour identifier les relations verrouillées, ceci ne fonctionnera correctement qu'avec les relations de la base en cours (celles pour qui la colonne database est soit l'OID de la base en cours soit zéro). Si vous avez activé le collecteur de statistiques, la colonne pid peut être jointe à la colonne procpid de la vue pg_stat_activity pour obtenir plus d'information sur le propriétaire de la session ou attendant de détenir le verrou. 43.33. pg_rules La vue pg_rules fournit un accès à des informations utiles sur les règles de réécriture des requêtes. Tableau 43-33. Colonnes de pg_rules Nom Type Références Description schemaname name pg_namespace.nspname nom du schéma contenant la table tablename name pg_class.relname nom de la table pour laquelle est créée la règle rulename name pg_rewrite.rulename nom de la règle definition text définition de la règle (une commande de création reconstruite) La vue pg_rules exclut les règles ON SELECT rules des vues ; elles sont disponibles dans pg_views. 27/05/2017 24/27 841050908 FT/ROSI/DPS/ISS/EMA 43.34. pg_settings La vue pg_settings fournit un accès aux paramètres d'exécution du serveur. C'est essentiellement une autre interface aux commandes SHOW et SET. Elle fournit aussi un accès à certaines informations sur chaque paramètre qui ne sont pas directement accessible avec SHOW, telles que les valeurs minimum et maximum. Tableau 43-34. Colonnes de pg_settings Nom Type Références name text Description nom du paramètres d'exécution setting text valeur actuelle du paramètre context text contexte requis pour initialiser la valeur du paramètre vartype text type du paramètre (bool, integer, real ou string) source source de la valeur du paramètre actuel text min_val text valeur minimum autorisée du paramètre (NULL pour les valeurs non numériques) max_val text valeur maximum autorisée du paramètre (NULL pour les valeurs non numériques) La vue pg_settings n'accepte pas d'insertion ou de suppression mais peut être mise à jour. Un UPDATE appliqué à une ligne de pg_settings est équivalent à l'exécution de la commande SET sur ce paramètre nommé. Le changement affecte seulement la valeur utilisée par la session actuelle. Si un UPDATE est lancé à l'intérieur d'une transaction qui est annulé plus tard, les effets de la commande UPDATE disparaisse lorsque les effets de la transaction sont annulés. Une fois que la transaction est validée, les effets persistent jusqu'à la fin de la session, à moins qu'un autre UPDATE ou SET ne modifie la valeur. 43.35. pg_stats La vue pg_stats fournit un accès aux informations stockées dans la table système pg_statistic. Cette vue autorise un accès aux seules lignes de pg_statistic correspondant aux tables pour lequel l'utilisateur a un droit de lecture et, donc, aucun problème de sécurité n'empêche l'accès en lecture de cette vue au public. pg_stats est aussi conçu pour afficher l'information dans un format plus lisible que le catalogue sous-jacent, au prix d'un schéma qui doit être étendu lorsque de nouveaux types sont définis dans pg_statistic. Tableau 43-35. Colonnes de pg_stats Nome Type Références Description schemaname name pg_namespace.nspname nom du schéma contenant la table tablename name pg_class.relname attname name pg_attribute.attname nom de la colonne décrite par cette ligne null_frac real fraction d'entrées de colonnes qui sont NULL avg_width integer largeur moyenne en octets des entrées de la colonne real Si plus grand que zéro, le nombre estimé de valeurs distinctes dans la colonne. Si négatif, le nombre de valeurs distinctes divisé par le nombre de lignes, le tout n_distinct 27/05/2017 25/27 nome de la table 841050908 FT/ROSI/DPS/ISS/EMA Nome Type Références Description muliplié par -1. (La forme négative est utilisée quand ANALYZE croit que le nombre de valeurs distinctes a tendance à grossir au fur et à mesure que la table grossit ; la forme positive est utilisé lorsque la commande semble avoir un nombre fixe de valeurs possibles.) Par exemple, -1 indique une colonne unique pour laquelle le nombre de valeurs distinctes est identique aux nombres de lignes. most_common_vals Une liste des valeurs habituelles dans cette colonne. (NULL si aucune valeur ne semble identique aux autres.) anyarray most_common_freqs real[] Une liste des fréquences des valeurs les plus habituelles, c'est-à-dire le nombre d'occurrences de chacune divisé par le nombre total de lignes. (NULL lorsque most_common_vals l'est.) histogram_bounds anyarray Une liste des valeurs qui divisent les valeurs de la colonne en groupes de population approximativement identique. Les valeurs dans most_common_vals, s'ils existent, sont omises de ce calcul d'histogramme. (Cette colonne est NULL si le type de données de la colonne ne dispose pas de l'opérateur < ou si la liste most_common_vals tient compte de la population complète.) real Corrélation statistique entre l'ordre physique des lignes et l'ordre logique des valeurs de la colonne. Ceci va de -1 à +1. Lorsque la valeur est plus près de -1 ou +1, un parcours de l'index sur la colonne sera estimé moins cher que si cette valeur tend vers zéro, à cause de la réduction d'accès aléatoire au disque. (Cette colonne est NULL si le type de données de la colonne n'a pas l'opérateur < operator.) correlation Le nombre maximum d'entrées dans most_common_vals et histogram_bounds est configurable colonne par colonne en utilisant la commande ALTER TABLE SET STATISTICS ou globalement avec le paramètre d'exécution default_statistics_target. 43.36. pg_tables La vue pg_tables fournit un accès à des informations utiles sur chaque table de la base de données. Tableau 43-36. Colonnes de pg_tables Nome schemaname 27/05/2017 Type name Références Description pg_namespace.nspname nom du schéma contenant la table 26/27 841050908 FT/ROSI/DPS/ISS/EMA Nome Type Références Description tablename name pg_class.relname nom de la table tableowner name pg_shadow.usename nom du propriétaire de la table hasindexes boolean pg_class.relhasindex vrai si la table a (ou a récemment eu) des index hasrules boolean pg_class.relhasrules vrai si la table dispose de règles hastriggers boolean pg_class.reltriggers vrai si la table dispose de déclencheurs (triggers) 43.37. pg_user La vue pg_user fournit un accès aux informations concernant les utilisateurs de la base de données. C'est une simple vue lisible publiquement de pg_shadow mais qui n'affiche pas le champ du mot de passe. Tableau 43-37. Colonnes de pg_user Nome Type Références Description usename name Nom de l'utilisateur usesysid int4 Identifiant de l'utilisateur (un nombre arbitraire utilisé en référence à cet utilisateur) usecreatedb bool L'utilisateur peut créer des bases de données usesuper bool L'utilisateur est un super-utilisateur usecatupd bool L'utilisateur pourrait mettre à jour les tables systèmes. (Même un super-utilisateur ne pourrait pas le faire tant que cette colonne n'est pas initialisée à vrai. passwd text Ce n'est pas le mot de passe (toujours ********) valuntil abstime Temps d'expiration du compte (utilisé seulement pour l'authentification des mots de passe) useconfig text[] Variables d'exécution par défaut de la session 43.38. pg_views La vue pg_views fournit un accès à d'importantes informations de chaque vue de la base de données. Tableau 43-38. Colonnes de pg_views Nome Type Références Description schemaname name pg_namespace.nspname Nom du schéma contenant la vue viewname name pg_class.relname Nom de la vue viewowner name pg_shadow.usename Nom du propriétaire de la vue definition text 27/05/2017 Définition de la vue (une requête SELECT reconstruite) 27/27 841050908