IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

9.25. Fonctions d'informations système

Le Tableau 9.59, « Fonctions d'information de session » présente diverses fonctions qui extraient des informations de session et système.

En plus des fonctions listées dans cette section, il existe plusieurs fonctions relatives au système de statistiques qui fournissent aussi des informations système. Voir Section 28.2.2, « Visualiser les statistiques » pour plus d'informations.

Tableau 9.59. Fonctions d'information de session

Nom Type de retour Description
current_catalog name nom de la base de données en cours (appelée « catalog » dans le standard SQL)
current_database() nom nom de la base de données courante
current_query() text texte de la requête en cours d'exécution, tel qu'elle a été soumise par le client (pourrait contenir plus d'une instruction)
current_role name équivalent à current_user
current_schema[()] nom nom du schéma courant
current_schemas(boolean) nom[] nom des schémas dans le chemin de recherche, avec optionnellement les schémas implicites
current_user nom nom d'utilisateur du contexte d'exécution courant
inet_client_addr() inet adresse de la connexion distante
inet_client_port() int port de la connexion distante
inet_server_addr() inet adresse de la connexion locale
inet_server_port() int port de la connexion locale
pg_backend_pid() int Identifiant du processus serveur attaché à la session en cours
pg_blocking_pids(int) int[] Identifiants des processus (PID) bloqués par un processus spécifié par son PID
pg_conf_load_time() timestamp with time zone date et heure du dernier chargement de la configuration
pg_notification_queue_usage() double fraction de la queue de notificatyion asynchrone actuellement occupée (0-1)
pg_is_other_temp_schema(oid) boolean s'agit-il du schéma temporaire d'une autre session ?
pg_listening_channels() setof text noms des canaux que la session est en train d'écouter
pg_my_temp_schema() oid OID du schéma temporaire de la session, 0 si aucun
pg_postmaster_start_time() timestamp with time zone date et heure du démarrage du serveur
pg_trigger_depth() int niveau d'empilement actuel de triggers PostgreSQL™ (0 si la fonction n'est pas appelé à partir d'un trigger)
session_user name nom de l'utilisateur de session
user name équivalent à current_user
version() text informations de version de PostgreSQL™. Voir aussi server_version_num pour une version exploitable par une machine.

[Note]

Note

current_catalog, current_role, current_schema, current_user, session_user, ont un statut syntaxique spécial en SQL : ils doivent être appelés sans parenthèses à droite (optionnel avec PostgreSQL dans le cas de current_schema).

session_user est habituellement l'utilisateur qui a initié la connexion à la base de données ; mais les superutilisateurs peuvent modifier ce paramétrage avec SET SESSION AUTHORIZATION(7). current_user est l'identifiant de l'utilisateur, utilisable pour les vérifications de permissions. Il est habituellement identique à l'utilisateur de la session, mais il peut être modifié avec SET ROLE(7). Il change aussi pendant l'exécution des fonctions comprenant l'attribut SECURITY DEFINER. En langage Unix, l'utilisateur de la session est le « real user » (NdT : l'utilisateur réel) et l'utilisateur courant est l'« effective user » (NdT : l'utilisateur effectif). current_role et user sont des synonymes pour current_user. (Le standard SQL fait une distinction entre current_role et current_user, mais PostgreSQL™ ne la fait pas car il unifit les utilisateurs et les rôles en un seul type d'entité.)

current_schema renvoie le nom du premier schéma dans le chemin de recherche (ou une valeur NULL si ce dernier est vide). C'est le schéma utilisé pour toute création de table ou autre objet nommé sans précision d'un schéma cible. current_schemas(boolean) renvoie un tableau qui contient les noms de tous les schémas du chemin de recherche. L'option booléenne indique si les schémas système implicitement inclus, comme pg_catalog, doivent être inclus dans le chemin de recherche retourné.

[Note]

Note

Le chemin de recherche est modifiable à l'exécution. La commande est :

SET search_path TO schema [, schema, ...]

inet_client_addr renvoie l'adresse IP du client courant et inet_client_port le numéro du port. inet_server_addr renvoie l'adresse IP sur laquelle le serveur a accepté la connexion courante et inet_server_port le numéro du port. Toutes ces fonctions renvoient NULL si la connexion courante est établie via une socket de domaine Unix.

pg_blocking_pids renvoie un tableau d'identifiants de processus (PID) pour les sessions bloquant le processus serveur dont le PID est fourni en argument. Un tableau vide est renvoyé si le PID n'existe pas ou s'il n'est pas bloqué. Un processus serveur en bloque un autre s'il détient un verrou qui entre en conflit avec la demande de verrou d'un autre processus (blocage dur) ou s'il attend un verrou qui entrerait en conflit avec la demande de verrou d'un processus bloqué et qui est devant lui dans la queue d'attente (verrou léger). Lors de l'utilisation de requêtes parallélisées, le résultat liste toujours les PID visibles par le client (autrement dit, les résultats de pg_backend_pid) même si le verrou réel est détenu ou en attente par un processus fils. De ce fait, des PID pourraient apparaître plusieurs fois dans le résultat. De plus, il faut noter que, quand une transaction préparée détient un verrou en conflit, elle sera représentée par un identifiant de processus 0 dans le résultat de cette fonction. Les appels fréquents à cette fonction peuvent avoir un impact sur les performances de la base de données car cette fonction a besoin d'un accès exclusif à l'état partagé du gestionnaire de verrous pendant un court instant.

pg_conf_load_time renvoie timestamp with time zone indiquant à quel moment les fichiers de configuration du serveur ont été chargés. (Si la session en cours était déjà là à ce moment, ce sera le moment où la sessions elle-même a relu les fichiers de configurations. Cela veut dire que ce que renvoie cette fonction peut varier un peu suivant les sessions. Sinon, c'est le temps où le processus maître a relu les fichiers de configuration.)

pg_my_temp_schema renvoie l'identifiant (OID) du schéma temporaire de la session en cours ou 0 si ce schéma n'existe pas (parce que la session n'a pas créé de tables temporaires). pg_is_other_temp_schema renvoie true si l'OID indiqué est l'OID d'un schéma temporaire d'une autre session. (Ceci peut être utile pour exclure les tables temporaires d'autres sessions lors d'un affichage du catalogue.)

pg_listening_channels renvoie un ensemble de noms de canaux asynchrones de notifications que la session en cours écoute. asynchronous notification channels that the current session is listening pg_notification_queue_usage renvoie la fraction de l'espace total disponible pour les notifications actuellement occupées par des notifications en attente de traitement, sous la forme d'un double allant de 0 à 1. Voir LISTEN(7) et NOTIFY(7) pour plus d'informations.

pg_postmaster_start_time renvoie un horodatage au format timestamp with time zone correspondant au moment du démarrage du serveur.

version renvoie une chaîne qui décrit la version du serveur PostgreSQL™. Vous pouvez aussi obtenir cette information à partir de server_version ou, pour une version exploitable par une programme, server_version_num. Les développeurs de logiciels devraient utiliser server_version_num (disponible depuis la version 8.2) ou PQserverVersion() au lieu d'exploiter la version textuelle.

Le Tableau 9.60, « Fonctions de consultation des privilèges d'accès » liste les fonctions qui permettent aux utilisateurs de consulter les privilèges d'accès. Voir la Section 5.6, « Droits » pour plus d'informations sur les privilèges.

Tableau 9.60. Fonctions de consultation des privilèges d'accès

Nom Type de retour Description
has_any_column_privilege(user, table, privilege) boolean l'utilisateur a-t-il un droit sur une des colonnes de cette table
has_any_column_privilege(table, privilege) boolean l'utilisateur actuel a-t-il un droit sur une des colonnes de cette table
has_column_privilege(user, table, column, privilege) boolean l'utilisateur a-t-il un droit sur la colonne
has_column_privilege(table, column, privilege) boolean l'utilisateur actuel a-t-il un droit sur la colonne
has_database_privilege (utilisateur, base, privilège) boolean utilisateur a-t-il le privilège privilège sur base
has_database_privilege (base, privilège) boolean l'utilisateur courant a-t-il le privilège privilège sur base
has_foreign_data_wrapper_privilege(user, fdw, privilege) boolean l'utilisateur a-t-il un droit sur ce wrapper de données distantes
has_foreign_data_wrapper_privilege(fdw, privilege) boolean l'utilisateur actuel a-t-il un droit sur ce wrapper de données distantes
has_function_privilege (utilisateur, fonction, privilège) boolean utilisateur a-t-il le privilège privilège sur fonction
has_function_privilege (fonction, privilège) boolean l'utilisateur courant a-t-il le privilège privilège sur fonction
has_language_privilege (utilisateur, langage, privilège) boolean utilisateur a-t-il le privilège privilège sur langage
has_language_privilege (langage, droit) boolean l'utilisateur courant a-t-il le privilège privilège sur langage
has_schema_privilege(utilisateur, schéma, privilège) boolean utilisateur a-t-il le privilège privilège sur schéma
has_schema_privilege(schéma, privilège) boolean l'utilisateur courant a-t-il le privilège privilège sur schéma
has_sequence_privilege(user, sequence, privilege) boolean l'utilisateur a-t-il un droit sur cette séquence
has_sequence_privilege(sequence, privilege) boolean l'utilisateur actuel a-t-il un droit sur cette séquence
has_server_privilege(user, server, privilege) boolean l'utilisateur actuel a-t-il un droit sur ce serveur
has_server_privilege(server, privilege) boolean l'utilisateur actuel a-t-il un droit sur ce serveur
has_table_privilege(utilisateur, table, privilège) boolean utilisateur a-t-il le privilège privilège sur table
has_table_privilege(table, privilege) boolean l'utilisateur courant a-t-il le privilège privilège sur table
has_tablespace_privilege (utilisateur, tablespace, privilège) boolean utilisateur a-t-il le privilège privilège sur tablespace
has_tablespace_privilege (tablespace, privilège) boolean l'utilisateur courant a-t-il le privilège privilège sur tablespace
has_type_privilege(user, type, privilege) boolean l'utilisateur a-t-il des droits pour le type
has_type_privilege(type, privilege) boolean l'utilisateur courant a-t-il des droits pour le type
pg_has_role(utilisateur, rôle, privilège) boolean utilisateur a-t-il le privilège privilège sur rôle
row_security_active(table) boolean est-ce que l'utilisateur actuel à le mode row level security activé pour la table
pg_has_role(rôle, privilège) boolean l'utilisateur courant a-t-il le privilège privilège sur rôle

has_table_privilege vérifie si l'utilisateur possède un privilège particulier d'accès à une table. L'utilisateur peut être indiqué par son nom ou son OID (pg_authid.oid), public pour indiquer le pseudo-rôle PUBLIC. Si l'argument est omis, current_user est utilisé. La table peut être indiquée par son nom ou par son OID. (Il existe donc six versions de has_table_privilege qui se distinguent par le nombre et le type de leurs arguments.) Lors de l'indication par nom, il est possible de préciser le schéma. Les privilèges possibles, indiqués sous la forme d'une chaîne de caractères, sont : SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ou TRIGGER. En option, WITH GRANT OPTION peut être ajouté à un type de droit pour tester si le droit est obtenu avec l'option « grant ». De plus, plusieurs types de droit peuvent être listés, séparés par des virgules, auquel cas le résultat sera true si un des droits listés est obtenu. (la casse des droits n'a pas d'importance et les espaces blancs supplémentaires sont autorisés entre mais pas dans le nom des droits.) Certains exemples :

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
          

has_sequence_privilege vérifie si un utilisateur peut accéder à une séquence d'une façon ou d'une autre. Les arguments sont analogues à ceux de la fonction has_table_privilege. Le type de droit d'accès doit valoir soit USAGE, soit SELECT soit UPDATE.

has_any_column_privilege vérifie si un utilisateur peut accéder à une colonne d'une table d'une façon particulière. Les possibilités pour que ces arguments correspondent à ceux de has_table_privilege, sauf que le type de droit d'accès désiré doit être évalué à une combinaison de SELECT, INSERT, UPDATE ou REFERENCES. Notez qu'avoir un droit au niveau de la table le donne implicitement pour chaque colonne de la table, donc has_any_column_privilege renverra toujours true si has_table_privilege le fait pour les mêmes arguments. Mais has_any_column_privilege réussit aussi s'il y a un droit « grant » sur une colonne pour ce droit.

has_column_privilege vérifie si un utilisateur peut accéder à une colonne d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege, avec un supplément : la colonne doit être indiquée soit par nom soit par numéro d'attribut. Le type de droit d'accès désiré doit être une combinaison de SELECT, INSERT, UPDATE ou REFERENCES. Notez qu'avoir un de ces droits au niveau table les donne implicitement pour chaque colonne de la table.

has_database_privilege vérifie si un utilisateur peut accéder à une base de données d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type de droit d'accès désiré doit être une combinaison de CREATE, CONNECT, TEMPORARY ou TEMP (qui est équivalent à TEMPORARY).

has_function_privilege vérifie si un utilisateur peut accéder à une fonction d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Lors de la spécification d'une fonction par une chaîne texte plutôt que par un OID, l'entrée autorisée est la même que pour le type de données regprocedure (voir Section 8.18, « Types identifiant d'objet »). Le type de droit d'accès désiré doit être EXECUTE. Voici un exemple :

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
          

has_foreign_data_wrapper_privilege vérifie si un utilisateur peut accéder à un wrapper de données distantes d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type de droit d'accès désiré doit être USAGE.

has_language_privilege vérifie si un utilisateur peut accéder à un langage de procédure d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type de droit d'accès désiré doit être USAGE.

has_schema_privilege vérifie si un utilisateur peut accéder à un schéma d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type de droits d'accès désiré doit être une combinaison de CREATE et USAGE.

has_server_privilege vérifie si un utilisateur peut accéder à un serveur distant d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type de droit d'accès désiré doit être USAGE.

has_tablespace_privilege vérifie si l'utilisateur possède un privilège particulier d'accès à un tablespace. Ses arguments sont analogues à has_table_privilege. Le seul privilège possible est CREATE.

has_type_privilege vérifie si un utilisateur peut accéder un type d'une façon particulière. Les possibilités au niveau des arguments sont analogues à has_table_privilege. Quand un type est spécifié par une chaîne de caractères plutôt que par un OID, l'entrée autorisée est la même que pour le type de données regtype (voir Section 8.18, « Types identifiant d'objet »). Le type de privilèe souhaité doit être USAGE.

pg_has_role vérifie si l'utilisateur possède un privilège particulier d'accès à un rôle. Ses arguments sont analogues à has_table_privilege, sauf que public n'est pas autorisé comme nom d'utilisateur. Le privilège doit être une combinaison de MEMBER et USAGE. MEMBER indique une appartenance directe ou indirecte au rôle (c'est-à-dire le droit d'exécuter SET ROLE) alors que USAGE indique que les droits du rôle sont immédiatement disponibles sans avoir à exécuter SET ROLE.

La fonction row_security_active vérifie si la sécurité niveau ligne est activée pour la table spécifiée dans le contexte de current_user et de l'environnement. La table peut être indiquée par son nom ou par son OID.

Le Tableau 9.61, « Fonctions d'interrogation de visibilité dans les schémas » affiche les fonctions qui permettent de savoir si un objet particulier est visible dans le chemin de recherche courant. Une table est dite visible si son schéma contenant est dans le chemin de recherche et qu'aucune table de même nom ne la précède dans le chemin de recherche. C'est équivalent au fait que la table peut être référencée par son nom sans qualification explicite de schéma. Par exemple, pour lister les noms de toutes les tables visibles :

      SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

Tableau 9.61. Fonctions d'interrogation de visibilité dans les schémas

Nom Type de retour Description
pg_collation_is_visible(collation_oid) boolean le collationnement est-il visible dans le chemin de recherche
pg_conversion_is_visible (conversion_oid) boolean la conversion est-elle visible dans le chemin de recherche
pg_function_is_visible (function_oid) boolean la fonction est-elle visible dans le chemin de recherche
pg_opclass_is_visible(opclass_oid) boolean la classe d'opérateur est-elle visible dans le chemin de recherche
pg_operator_is_visible(operator_oid) boolean l'opérateur est-il visible dans le chemin de recherche
pg_opfamily_is_visible(opclass_oid) boolean la famille d'opérateur est-elle visible dans le chemin de recherche
pg_table_is_visible(table_oid) boolean la table est-elle visible dans le chemin de recherche
pg_ts_config_is_visible(config_oid) boolean la configuration de la recherche textuelle est-elle visible dans le chemin de recherche
pg_ts_dict_is_visible(dict_oid) boolean le dictionnaire de recherche textuelle est-il visible dans le chemin de recherche
pg_ts_parser_is_visible(parser_oid) boolean l'analyseur syntaxique de recherche textuelle est-il visible dans le chemin de recherche
pg_ts_template_is_visible(template_oid) boolean le modèle de recherche textuelle est-il visible dans le chemin de recherche
pg_type_is_visible(type_oid) boolean le type (ou domaine) est-il visible dans le chemin de recherche

Chaque fonction vérifie la visibilité d'un type d'objet de la base de données. pg_table_is_visible peut aussi être utilisée avec des vues, vues matérialisées, index, séquences et tables externes, pg_type_is_visible avec les domaines. Pour les fonctions et les opérateurs, un objet est visible dans le chemin de recherche si aucun objet de même nom et prenant des arguments de mêmes types de données n'est précédemment présent dans le chemin de recherche. Pour les classes d'opérateurs, on considère à la fois le nom et la méthode d'accès à l'index associé.

Toutes ces fonctions nécessitent des OID pour identifier les objets à vérifier. Pour tester un objet par son nom, il est préférable d'utiliser les types d'alias d'OID (regclass, regtype, regprocedure ou regoperator). Par exemple

      SELECT pg_type_is_visible('mon_schema.widget'::regtype);

Il n'est pas très utile de tester ainsi un nom non qualifié -- si le nom peut être reconnu, c'est qu'il est visible.

Le Tableau 9.62, « Fonctions d'information du catalogue système » liste les fonctions qui extraient des informations des catalogues système.

Tableau 9.62. Fonctions d'information du catalogue système

Nom Type de retour Description
format_type (type_oid, typemod) text récupère le nom SQL d'un type de données
pg_get_constraintdef(constraint_oid) text récupère la définition d'une contrainte
pg_get_constraintdef(constraint_oid, pretty_bool) text récupère la définition d'une contrainte
pg_get_expr(pg_node_tree, relation_oid) text décompile la forme interne d'une expression, en supposant que toutes les variables qu'elle contient font référence à la relation indiquée par le second paramètre
pg_get_expr(pg_node_tree, relation_oid, pretty_bool) text décompile la forme interne d'une expression, en supposant que toutes les variables qu'elle contient font référence à la relation indiquée par le second paramètre
pg_get_functiondef(func_oid) text obtient une définition de la fonction
pg_get_function_arguments(func_oid) text obtient une définition de la liste des arguments de la fonction (avec les valeurs par défaut)
pg_get_function_identity_arguments (func_oid) text obtient une définition de la liste des arguments de la fonction (sans valeurs par défaut)
pg_get_function_result(func_oid) text obtient la clause RETURNS pour la fonction
pg_get_indexdef(index_oid) text récupère la commande CREATE INDEX de l'index
pg_get_indexdef(index_oid, column_no, pretty_bool) text récupère la commande CREATE INDEX pour l'index, ou la définition d'une seule colonne d'index quand column_no ne vaut pas zéro
pg_get_keywords() setof record récupère la liste des mots clés SQL et leur catégories
pg_get_ruledef(rule_oid) text récupère la commande CREATE RULE pour une règle
pg_get_ruledef(rule_oid, pretty_bool) text récupère la commande CREATE RULE de la règle
pg_get_serial_sequence(table_name, column_name) text récupère le nom de la séquence qu'une colonne serial, smallserial ou bigserial utilise
pg_get_triggerdef(trigger_oid) text récupère la commande CREATE [ CONSTRAINT ] TRIGGER du trigger
pg_get_triggerdef(trigger_oid, pretty_bool) text récupère la commande CREATE [ CONSTRAINT ] TRIGGER du déclencheur
pg_get_userbyid(role_oid) name récupère le nom du rôle possédant cet OID
pg_get_viewdef(view_name) text récupère la commande SELECT sous-jacente pour une vue standard ou matérialisée (deprecated)
pg_get_viewdef(view_name, pretty_bool) text récupère la commande SELECT sous-jacente pour une vue standard ou matérialisée (obsolète)
pg_get_viewdef(view_oid) text récupère la commande SELECT sous-jacente pour une vue standard ou matérialisée
pg_get_viewdef(view_oid, pretty_bool) text récupère la commande SELECT sous-jacente pour une vue standard ou matérialisée
pg_get_viewdef(view_oid, wrap_column_int) text récupère la commande SELECT pour une vue standard ou matérialisée ; les lignes contenant des champs sont terminées suivant le nombre de colonnes du terminal (l'affichage propre est effectuée directement
pg_index_column_has_property(index_oid, column_no, prop_name) boolean teste si une colonne d'un index a une propriété particulière
pg_index_has_property(index_oid, prop_name) boolean teste si un index a une propriété particulière
pg_indexam_has_property(am_oid, prop_name) boolean teste si une méthode d'accès à un index a une propriété particulière
pg_options_to_table(reloptions) setof record récupère l'ensemble de paires nom/valeur des options de stockage
pg_tablespace_databases(tablespace_oid) setof oid récupère l'ensemble des OID des bases qui possèdent des objets dans ce tablespace
pg_tablespace_location(tablespace_oid) text récupère le chemin complet du répertoire utilisée par le tablespace
pg_typeof(any) regtype obtient le type de données de toute valeur
to_regnamespace(schema_name) regnamespace obtient l'OID du schéma indiqué
to_regrole(role_name) regrole obtient l'OID du rôle indiqué
collation for (any) text récupère le collationnement de l'argument
to_regclass(rel_name) regclass récupère l'OID de la relation nommée
to_regproc(func_name) regproc récupère l'OID de la fonction nommée
to_regprocedure(func_name) regprocedure récupère l'OID de la fonction nommée
to_regoper(operator_name) regoper récupère l'OID de l'opérateur nommé
to_regoperator(operator_name) regoperator récupère l'OID de l'opérateur nommé
to_regtype(type_name) regtype récupère l'OID du type nommé

format_type renvoie le nom SQL d'un type de données identifié par son OID de type et éventuellement un modificateur de type. On passe NULL pour le modificateur de type si aucun modificateur spécifique n'est connu.

pg_get_keywords renvoie un ensemble d'enregistrements décrivant les mots clés SQL reconnus par le serveur. La colonne word contient le mot clé. La colonne catcode contient un code de catégorie : U pour non réservé, C pour nom de colonne, T pour nom d'un type ou d'une fonction et R pour réservé. La colonne catdesc contient une chaîne pouvant être traduite décrivant la catégorie.

pg_get_constraintdef, pg_get_indexdef, pg_get_ruledef et pg_get_triggerdef reconstruisent respectivement la commande de création d'une contrainte, d'un index, d'une règle ou d'un déclencheur. (Il s'agit d'une reconstruction décompilée, pas du texte originale de la commande.) pg_get_expr décompile la forme interne d'une expression individuelle, comme la valeur par défaut d'une colonne. Cela peut être utile pour examiner le contenu des catalogues système. Si l'expression contient des variables, spécifiez l'OID de la relation à laquelle elles font référence dans le second paramètre ; si aucune variable n'est attendue, zéro est suffisant. pg_get_viewdef reconstruit la requête SELECT qui définit une vue. La plupart de ces fonctions existent en deux versions, l'une d'elles permettant, optionnellement, d'« afficher joliment » le résultat. Ce format est plus lisible, mais il est probable que les futures versions de PostgreSQL™ continuent d'interprêter le format par défaut actuel de la même façon ; la version « jolie » doit être évitée dans les sauvegardes. Passer false pour le paramètre de « jolie » sortie conduit au même résultat que la variante sans ce paramètre.

pg_get_functiondef renvoie une instruction CREATE OR REPLACE FUNCTION complète pour une fonction. pg_get_function_arguments renvoie une liste des arguments d'un fonction, de la façon dont elle apparaîtrait dans CREATE FUNCTION. pg_get_function_result renvoie de façon similaire la clause RETURNS appropriée pour la fonction. pg_get_function_identity_arguments renvoie la liste d'arguments nécessaire pour identifier une fonction, dans la forme qu'elle devrait avoir pour faire partie d'un ALTER FUNCTION, par exemple. Cette forme omet les valeurs par défaut.

pg_get_serial_sequence renvoie le nom de la séquence associée à une colonne ou NULL si aucune séquence n'est associée à la colonne. Le premier argument en entrée est un nom de table, éventuellement qualifié du schéma. Le second paramètre est un nom de colonne. Comme le premier paramètre peut contenir le nom du schéma et de la table, il n'est pas traité comme un identifiant entre guillemets doubles, ce qui signifie qu'il est converti en minuscules par défaut, alors que le second paramètre, simple nom de colonne, est traité comme s'il était entre guillemets doubles et sa casse est préservée. La fonction renvoie une valeur convenablement formatée pour être traitée par les fonctions de traitement des séquences (voir Section 9.16, « Fonctions de manipulation de séquences »). Cette association peut être modifiée ou supprimée avec ALTER SEQUENCE OWNED BY. (La fonction aurait probablement dû s'appeler pg_get_owned_sequence ; son nom reflète le fait qu'elle est typiquement utilisée avec les colonnes serial et bigserial.)

pg_get_userbyid récupère le nom d'un rôle d'après son OID.

pg_index_column_has_property, pg_index_has_property et pg_indexam_has_property indiquent si la colonne d'index, l'index ou la méthode d'accès à l'index possède la propriété nommée. NULL est renvoyé si le nom de la propriété n'est pas connu ou ne s'applique pas à cet objet particulier ou si l'OID ou le numéro de colonne n'identifie pas un objet valide. Référez-vous à Tableau 9.63, « Propriétés des colonnes d'index » pour les propriétés sur les colonnes, Tableau 9.64, « Propriétés des index » pour les propriétés sur les index et Tableau 9.65, « Propriétés des méthodes d'accès aux index » pour les propriétés sur les méthodes d'accès. (Notez que les méthodes d'accès provenant d'extensions peuvent définir des noms de propriété supplémentaires pour leurs index.)

Tableau 9.63. Propriétés des colonnes d'index

Nom Description
asc Est-ce que la colonne trie en ordre ascendant pour un parcours en avant ?
desc Est-ce que la colonne trie en ordre descendant pour un parcours en avant ?
nulls_first Est-ce que la colonne trie les valeurs NULL en premier pour un parcours en avant ?
nulls_last Est-ce que la colonne trie les valeurs NULL en dernier pour un parcours en avant ?
orderable Est-ce que la colonne possède un ordre de tri défini ?
distance_orderable La colonne peut-elle être parcourue dans l'ordre par un opérateur « distance », par exemple ORDER BY col <-> constante ?
returnable La valeur de la colonne peut-elle être renvoyée par un parcours d'index seul ?
search_array La colonne supporte-t-elle nativement les recherches du type col = ANY(array) ?
search_nulls Est-ce que la colonne supporte les recherches IS NULL et IS NOT NULL ?

Tableau 9.64. Propriétés des index

Nom Description
clusterable Cet index peut-il être utilisé dans une commande CLUSTER ?
index_scan Cet index supporte-t-il les parcours simples (non bitmaps) ?
bitmap_scan L'index supporte-t-il les parcours bitmap ?
backward_scan L'index peut-il être parcouru à l'envers ?

Tableau 9.65. Propriétés des méthodes d'accès aux index

Nom Description
can_order La méthode d'accès supporte-t-elle ASC, DESC et les mots clés relatifs dans CREATE INDEX ?
can_unique La méthode d'accès supporte-t-elle les index uniques ?
can_multi_col La méthode d'accès supporte-t-elle les index avec plusieurs colonnes ?
can_exclude La méthode d'accès supporte-t-elle les contraintes d'exclusion ?

pg_options_to_table renvoie l'ensemble de paires nom/valeur des options de stockage (nom_option/valeur_option) quand lui est fourni pg_class.reloptions ou pg_attribute.attoptions.

pg_tablespace_databases autorise l'examen d'un tablespace. Il renvoie l'ensemble des OID des bases qui possèdent des objets stockés dans le tablespace. Si la fonction renvoie une ligne, le tablespace n'est pas vide et ne peut pas être supprimée. Pour afficher les objets spécifiques peuplant le tablespace, il est nécessaire de se connecter aux bases identifiées par pg_tablespace_databases et de requêter le catalogue pg_class.

pg_typeof renvoie l'OID du type de données de la valeur qui lui est passé. Ceci est utile pour dépanner ou pour construire dynamiquement des requêtes SQL. La fonction est déclarée comme renvoyant regtype, qui est une type d'alias d'OID (voir Section 8.18, « Types identifiant d'objet ») ; cela signifie que c'est la même chose qu'un OID pour un bit de comparaison mais que cela s'affiche comme un nom de type. Par exemple :

SELECT pg_typeof(33);

 pg_typeof
-----------
 integer
(1 row)

SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
 typlen
--------
      4
(1 row)
          

L'expression collation for renvoit le collationnement de la valeur qui lui est fournie. Par exemple :

SELECT collation for (description) FROM pg_description LIMIT 1;
 pg_collation_for
------------------
 "default"
(1 row)

SELECT collation for ('foo' COLLATE "de_DE");
 pg_collation_for
------------------
 "de_DE"
(1 row)
          

La valeur en retour peut être entre guillemets et qualifiée d'un schéma. Si aucun collationnement n'est retrouvé à partir de l'expression de l'argument, une valeur NULL est renvoyée. Si le type de l'argument n'est pas affecté par un collationnement, une erreur est renvoyée.

Les fonctions to_regclass, to_regproc, to_regprocedure, to_regoper, to_regoperator, to_regtype to_regnamespace et to_regrole traduisent les noms de relation, fonction, opérateur, type, schéma et rôle (en tant que text) en objets de type, respectivement, regclass, regproc, regprocedure, regoper, regoperator et regtype, regnamespace et regrole. Ces fonctions diffèrent d'une conversion à partir du texte dans le sens où elles n'acceptent pas un OID numérique, et qu'elles renvoient NULL plutôt d'une erreur si le nom n'est pas trouvé (ou, pour to_regproc et to_regoper, si le nom donné correspond à plusieurs objets).

Tableau 9.66, « Fonctions d'information et d'adressage des objets » liste les fonctions relatives à l'identification et l'adressage des objets de la base de données.

Tableau 9.66. Fonctions d'information et d'adressage des objets

Nom Type de retour Description
pg_describe_object(catalog_id, object_id, object_sub_id) text récupère la description d'un objet de la base de données
pg_identify_object(catalog_id oid, object_id oid, object_sub_id integer) type text, schema text, name text, identity text récupère les informations d'identification d'un objet de la base de données
pg_identify_object_as_address(catalog_id oid, object_id oid, object_sub_id integer) type text, name text[], args text[] récupère la représentation externe de l'adresse d'un objet de la base de données
pg_get_object_address(type text, name text[], args text[]) catalog_id oid, object_id oid, object_sub_id int32 récupère l'adresse d'un objet de la base de données, à partir de sa représentation externe

La fonction pg_describe_object renvoie une description textuelle d'un objet de la base de données spécifié par l'OID du catalogue, son propre OID et (éventuellement à zéro) de l'OID de son sous-objet. La description est destinée à être lisible par un être humain, et pourrait être interprétée en fonction de la configuration du serveur. Ceci est utile pour déterminer l'identité d'un objet tel qu'il est stocké dans le catalogue pg_depend

pg_identify_object renvoie une ligne contenant assez d'informations pour identifier de manière unique l'objet de la base de données spécifié par l'OID de son OID, son propre OID et (éventuellement à zéro) de l'OID de son sous-objet. Cette information est destinée à être lisible par un être humain, et n'est jamais interprétée. type identifie le type de l'objet de la base de données ; schema est le nom du schéma dans lequel se situe l'objet (ou NULL pour les types d'objets qui ne sont pas affectés à des schémas) ; name est le nom de l'objet, si nécessaire entre guillemets, seulement présent s'il peut être utilisé (avec le nom du schéma, si pertinent) comme un identifiant unique de l'objet, sinon NULL ; identity est l'identité complète de l'objet, avec le format précis dépendant du type de l'objet, et chaque partie à l'intérieur du format étant qualifiée du schéma et entre guillemets si nécessaire.

pg_identify_object_as_address renvoie une ligne contenant assez d'informations pour identifier de manière unique l'objet de la base de données spécifié par l'OID de son catalogue, son propre OID et (éventuellement à zéro) l'OID de son sous-objet. L'information retournée est indépendante du serveur actuel, c'est-à-dire qu'elle pourrait être utilisée pour identifier un objet nommé de manière identique sur un autre serveur. type identifie le type de l'objet de la base de données ; name et args sont des tableaux de texte qui forment ensemble une référence sur l'objet. Ces trois colonnes peuvent être passées en paramètres à la fonction pg_get_object_address pour obtenir l'adresse interne de l'objet. Cette fonction est l'inverse de pg_get_object_address.

pg_get_object_address renvoie une ligne contenant assez d'informations pour identifier de manière unique l'objet de la base de données spécifié par son type et ses tableaux de nom et d'argument. Les valeurs retournées sont celles qui seraient utilisées dans les catalogues systèmes tel que pg_depend et peuvent être passées à d'autres fonctions systèmes comme pg_identify_object ou pg_describe_object. catalog_id est l'OID du catalogue système contenant l'objet ; object_id est l'OID de l'objet lui même, et object_sub_id est l'OID du sous objet, ou zéro si non applicable. Cette fonction est l'inverse de pg_identify_object_as_address

Les fonctions affichées dans Tableau 9.67, « Fonctions d'informations sur les commentaires » extraient les commentaires stockées précédemment avec la commande COMMENT(7). Une valeur NULL est renvoyée si aucun commentaire ne correspond aux paramètres donnés.

Tableau 9.67. Fonctions d'informations sur les commentaires

Nom Type de retour Description
col_description(table_oid, column_number) text récupère le commentaire d'une colonne de la table
obj_description (object_oid, catalog_name) text récupère le commentaire d'un objet de la base de données
obj_description(object_oid) text récupère le commentaire d'un objet de la base de données (obsolète)
shobj_description(object_oid, catalog_name) text récupère le commentaire d'un objet partagé de la base de données

col_description renvoie le commentaire d'une colonne de table, la colonne étant précisée par l'OID de la table et son numéro de colonne. obj_description ne peut pas être utilisée pour les colonnes de table car les colonnes n'ont pas d'OID propres.

La forme à deux paramètres de obj_description renvoie le commentaire d'un objet de la base de données, précisé par son OID et le nom du catalogue système le contenant. Par exemple, obj_description(123456,'pg_class') récupère le commentaire pour la table d'OID 123456. La forme à un paramètre de obj_description ne requiert que l'OID de l'objet. Elle est maintenant obsolète car il n'existe aucune garantie que les OID soient uniques au travers des différents catalogues système ; un mauvais commentaire peut alors être renvoyé.

shobj_description est utilisé comme obj_description, mais pour les commentaires des objets partagés. Certains catalogues systèmes sont globaux à toutes les bases de données à l'intérieur de chaque cluster et les descriptions des objets imbriqués sont stockées globalement.

Les fonctions présentées dans Tableau 9.68, « ID de transaction et instantanés » remontent à l'utilisateur des informations de transaction de niveau interne au serveur. L'usage principal de ces fonctions est de déterminer les transactions commitées entre deux instantanés (« snapshots »).

Tableau 9.68. ID de transaction et instantanés

Nom Type retour Description
txid_current() bigint récupère l'ID de transaction courant, en assignant un nouvel ID si la transaction courante n'en a pas un
txid_current_snapshot() txid_snapshot récupère l'instantané courant
txid_snapshot_xip(txid_snapshot) setof bigint récupère l'ID de la transaction en cours dans l'instantané
txid_snapshot_xmax(txid_snapshot) bigint récupère le xmax de l'instantané
txid_snapshot_xmin(txid_snapshot) bigint récupère le xmin de l'instantané
txid_visible_in_snapshot(bigint, txid_snapshot) boolean l'ID de transaction est-il visible dans l'instantané ? (ne pas utiliser les identifiants de sous-transactions)

Le type interne ID de transaction (xid) est sur 32 bits. Il boucle donc tous les 4 milliards de transactions. Cependant, ces fonctions exportent au format 64 bits, étendu par un compteur « epoch », de façon à éviter tout cycle sur la durée de vie de l'installation. Le type de données utilisé par ces fonctions, txid_snapshot, stocke l'information de visibilité des ID de transaction à un instant particulier. Ces composants sont décrits dans Tableau 9.69, « Composants de l'instantané ».

Tableau 9.69. Composants de l'instantané

Nom Description
xmin ID de transaction (txid) le plus ancien encore actif. Toutes les transactions plus anciennes sont soient commitées et visibles, soient annulées et mortes.
xmax Premier txid non encore assigné. Tous les txids plus grands ou égals à celui-ci ne sont pas encore démarrés à ce moment de l'instantané, et donc invisibles.
xip_list Active les identifiants de transactions (txids) au moment de la prise de l'image. La liste inclut seulement les identifiants actifs entre xmin et xmax ; il pourrait y avoir des identifiants plus gros que xmax. Un identifiant qui est xmin <= txid < xmax et qui n'est pas dans cette liste est déjà terminé au moment de la prise de l'image, et du coup est soit visible soit mort suivant son statut de validation. La liste n'inclut pas les identifiants de transactions des sous-transactions.

La représentation textuelle du txid_snapshot est xmin:xmax:xip_list. Ainsi 10:20:10,14,15 signifie xmin=10, xmax=20, xip_list=10, 14, 15.

Les fonctions décrites dans le Tableau 9.70, « Informations sur les transactions validées » fournissent des informations à propos des transactions déjà validées. Ces fonctions donnent principalement des informations sur le moment où elles ont été validées. Elles fournissent seulement des données utiles lorsque l'option de configuration track_commit_timestamp est activée et seulement pour les transactions qui ont été validées après son activation.

Tableau 9.70. Informations sur les transactions validées

Nom Type retour Description
pg_xact_commit_timestamp(xid) timestamp with time zone récupère l'horodatage de la validation d'une transaction
pg_last_committed_xact() xid xid, timestamp timestamp with time zone récupère l'ID de transaction et l'horodatage de la validation de la dernière transaction validée

Les fonctions montrées dans Tableau 9.71, « Fonctions des données de contrôle » affichent des informations initialisées lors de l'opération réalisée par la commande initdb, telles que la version du catalogue. Elles affichent aussi des informations sur la journalisation et le traitement des checkpoints. Cette information est valable pour toute l'instance, et n'est donc pas spécifique à une base de données. Elles fournissent à peu près les mêmes informations que pg_controldata(1) et en s'informant auprès de la même source de données, mais dans une forme convenant mieux à des fonctions SQL.

Tableau 9.71. Fonctions des données de contrôle

Nom Type en retour Description
pg_control_checkpoint() record Renvoie des informations sur l'état actuel du checkpoint.
pg_control_system() record Renvoie des informations ur l'état actuel du fichier controldata.
pg_control_init() record Renvoie des informations sur l'état d'initialisation de l'instance.
pg_control_recovery() record Renvoie des informations sur l'état de restauration.

pg_control_checkpoint renvoie un enregistrement, dont les colonnes sont décrites dans Tableau 9.72, « Colonnes de pg_control_checkpoint »

Tableau 9.72. Colonnes de pg_control_checkpoint

Nom de colonne Type de données
checkpoint_location pg_lsn
prior_location pg_lsn
redo_location pg_lsn
redo_wal_file text
timeline_id integer
prev_timeline_id integer
full_page_writes boolean
next_xid text
next_oid oid
next_multixact_id xid
next_multi_offset xid
oldest_xid xid
oldest_xid_dbid oid
oldest_active_xid xid
oldest_multi_xid xid
oldest_multi_dbid oid
oldest_commit_ts_xid xid
newest_commit_ts_xid xid
checkpoint_time timestamp with time zone

pg_control_system renvoie un enregistrement, détaillé dans Tableau 9.73, « Colonnes de pg_control_system ».

Tableau 9.73. Colonnes de pg_control_system

Nom de colonne Type de données
pg_control_version integer
catalog_version_no integer
system_identifier bigint
pg_control_last_modified timestamp with time zone

pg_control_init renvoie un enregistrement, détaillé dans Tableau 9.74, « Colonnes de pg_control_init ».

Tableau 9.74. Colonnes de pg_control_init

Nom de la colonne Type de données
max_data_alignment integer
database_block_size integer
blocks_per_segment integer
wal_block_size integer
bytes_per_wal_segment integer
max_identifier_length integer
max_index_columns integer
max_toast_chunk_size integer
large_object_chunk_size integer
bigint_timestamps boolean
float4_pass_by_value boolean
float8_pass_by_value boolean
data_page_checksum_version integer

pg_control_recovery renvoie un enregistrement, montré dans Tableau 9.75, « Colonnes de pg_control_recovery »

Tableau 9.75. Colonnes de pg_control_recovery

Nom de la colonne Type de données
min_recovery_end_location pg_lsn
min_recovery_end_timeline integer
backup_start_location pg_lsn
backup_end_location pg_lsn
end_of_backup_record_required boolean