PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.10 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs d'information sur le systÚme

9.26. Fonctions et opĂ©rateurs d'information sur le systĂšme #

Les fonctions décrites dans cette section sont utilisées pour obtenir des informations variées sur une installation PostgreSQL.

9.26.1. Fonctions d'information sur les sessions #

Tableau 9.67 montre diffĂ©rentes fonctions pour extraire des informations sur les sessions et le 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 sur le systĂšme. Voir Section 28.2.25 pour plus d'informations.

Tableau 9.67. Fonctions d'information sur la session

Fonction

Description

current_catalog → name

current_database () → name

Renvoie le nom de la base actuelle. (Les bases sont appelĂ©es des « catalogues Â» dans le standard SQL, donc current_catalog est le terme du standard.)

current_query () → text

Renvoie le texte de la requĂȘte en cours d'exĂ©cution telle qu'elle a Ă©tĂ© envoyĂ©e par le client (elle pourrait donc contenir plus d'une requĂȘte).

current_role → name

Équivalent à current_user.

current_schema → name

current_schema () → name

Renvoie le nom du premier schéma dans le chemin de recherche (ou une valeur NULL si le chemin de recherche est vide). C'est le schéma qui sera utilisé par toute création de tables ou d'autres objets nommés si un schéma cible n'est pas précisé.

current_schemas ( include_implicit boolean ) → name[]

Renvoie un tableau de noms pour tous les schémas présents dans le chemin de recherche, dans leur ordre de priorité. (Les éléments dans le paramÚtre search_path ne correspondant pas à des objets existants et cherchables sont omis.) Si l'argument booléen vaut true, alors les schémas systÚmes implicites, tels que pg_catalog sont inclus dans le résultat.

current_user → name

Renvoie le nom de l'utilisateur dans le contexte d'exécution actuel.

inet_client_addr () → inet

Renvoie l'adresse IP du client actuel ou NULL si la connexion actuelle a été réalisée via une socket de domaine Unix.

inet_client_port () → integer

Renvoie le numéro de port IP du client actuel, ou NULL si la connexion actuelle a été réalisée via une socket de domaine Unix.

inet_server_addr () → inet

Renvoie l'adresse IP par laquelle le serveur a accepté la connexion actuelle, ou NULL si la connexion actuelle a été réalisée via une socket de domaine Unix.

inet_server_port () → integer

Renvoie le numéro de port IP par lequel le serveur a accepté la connexion actuelle, ou NULL si la connexion actuelle a été réalisée via une socket de domaine Unix.

pg_backend_pid () → integer

Renvoie l'identifiant de processus du processus serveur attaché à la session actuelle.

pg_blocking_pids ( integer ) → integer[]

Renvoie un tableau d'identifiants de processus des sessions bloquant l'accÚs à un verrou pour le processus serveur dont l'identifiant a été donné. Renvoie un tableau vide si aucun processus ne le bloque.

Un processus serveur bloque un autre processus s'il dĂ©tient un verrou qui entre en conflit avec la demande de verrou du processus bloquĂ© (blocage dur) ou s'il est en attente d'un verrou qui rentrerait en conflit avec la demande de verrou du processus bloquĂ© et 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 identifiants des processus visibles du client (autrement dit, le rĂ©sultat de pg_backend_pid) mĂȘme si le verrou rĂ©el est dĂ©tenu ou attendu par un processus worker. Ceci rĂ©sulte potentiellement en des PID dupliquĂ©s dans le rĂ©sultat. De plus, notez que quand une transaction prĂ©parĂ©e dĂ©tient un verrou en conflit, il sera reprĂ©sentĂ© par un identifiant zĂ©ro.

Les appels fréquents à cette fonction ont des impacts sur les performances de la base car il est nécessaire d'avoir un accÚs exclusif à l'état partagé du gestionnaire de verrous pour un court moment.

pg_conf_load_time () → timestamp with time zone

Renvoie l'horodatage du dernier chargement des fichiers de configuration. Si la session actuelle Ă©tait vivante Ă  ce moment, cela sera l'heure quand la session a elle-mĂȘme relu les fichiers de configuration (donc le rĂ©sultat peut lĂ©gĂšrement varier sur les diffĂ©rentes sessions). Sinon c'est le moment oĂč le processus postmater relit les fichiers de configuration.

pg_current_logfile ( [ text ] ) → text

Renvoie le chemin du fichier de traces actuellement utilisĂ© par le collecteur de traces. Le chemin inclut le rĂ©pertoire log_directory et le nom du fichier de traces individuel. Le rĂ©sultat est NULL si le collecteur de traces est dĂ©sactivĂ©. Quand plusieurs fichiers de trace existent, chacun dans un format diffĂ©rent, pg_current_logfile sans argument renvoie le fichier vers le fichier ayant le premier format trouvĂ© dans la liste ordonnĂ©e : stderr, csvlog, jsonlog. NULL est renvoyĂ© si aucun fichier de trace n'a un de ces formats. Pour rĂ©clamer des informations sur un format spĂ©cifique de fichier de trace, indiquez soit csvlog, soit jsonlog, soit stderr comme valeur au paramĂštre optionnel. Le rĂ©sultat est NULL si le format de trace demandĂ© n'est pas configurĂ© dans log_destination. Le rĂ©sultat rĂ©flĂšte le contenu du fichier current_logfiles.

pg_my_temp_schema () → oid

Renvoie l'OID du schéma temporaire de la session en cours, ou zéro si ce schéma n'existe pas (parce que la session n'a pas créé de tables temporaires).

pg_is_other_temp_schema ( oid ) → boolean

Renvoie true si l'OID donnĂ© est l'OID du schĂ©ma temporaire d'une autre session. (Ceci peut ĂȘtre utile, par exemple, pour exclure les tables temporaires des autres sessions d'un affichage du catalogue.)

pg_jit_available () → boolean

Renvoie true si l'extension de compilation JIT est disponible (voir Chapitre 32) et si le paramĂštre de configuration jit est configurĂ© Ă  on.

pg_listening_channels () → setof text

Renvoie l'ensemble de noms des canaux de notification asynchrone sur lesquels la session actuelle écoute.

pg_notification_queue_usage () → double precision

Renvoie la fraction (0–1) de la taille maximale de la queue de notification asynchrone actuellement occupĂ©e par des notifications en attente de traitement. Voir LISTEN et NOTIFY pour plus d'informations.

pg_postmaster_start_time () → timestamp with time zone

Renvoie l'heure de démarrage du serveur.

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

Renvoie un tableau d'identifiants de processus des sessions bloquant le processus serveur avec l'identifiant de processus spécifié pour acquérir une image propre. Renvoie un tableau vide si ce processus n'existe pas ou s'il n'est pas bloqué.

Une session exĂ©cutant une transaction SERIALIZABLE bloque une transaction SERIALIZABLE READ ONLY DEFERRABLE sur l'acquisition d'une image jusqu'Ă  ce que ce dernier dĂ©termine s'il est sĂ»r d'Ă©viter de prendre des verrous de prĂ©dicat. Voir Section 13.2.3 pour plus d'informations sur les transactions sĂ©rialisables et dĂ©ferrables.

Les appels fréquents à cette fonction pourraient avoir des impacts sur la performance des bases car elle a besoin d'accéder à l'état partagé du gestionnaire de verrous de prédicats pour un court moment.

pg_trigger_depth () → integer

Renvoie le niveau de profondeur actuel des triggers PostgreSQL (0 si non appelé, directement ou indirectement, à partir d'un trigger).

session_user → name

Renvoie le nom d'utilisateur de la session.

system_user → text

Renvoie la méthode d'authentification et l'identité (si valide) que l'utilisateur a présenté lors du cycle d'authentification avant qu'il ne se voit affecter un rÎle de base. La forme utilisée est methode_authentification:identité ou NULL si l'utilisateur n'a pas été authentifié (par exemple si l'authentification trust a been été utilisée).

user → name

Équivalent à current_user.

version () → text

Renvoie une chaßne décrivant la version du serveur PostgreSQL. Vous pouvez aussi obtenir cette information à partir de server_version ou, pour une version lisible par un logiciel, vous pouvez utiliser server_version_num. Les développeurs de logiciels devraient utiliser server_version_num (disponible depuis la version 8.2) ou PQserverVersion au lieu d'analyser la version texte.


Note

current_catalog, current_role, current_schema, current_user, session_user et user ont un statut syntaxique spĂ©cial en SQL : elles doivent ĂȘtre appelĂ©es sans les parenthĂšses. Dans PostgreSQL, les parenthĂšses peuvent ĂȘtre utilisĂ©es en option avec current_schema, mais pas avec les autres.

session_user est habituellement l'utilisateur qui a initiĂ© la connexion Ă  la base de donnĂ©es ; les superutilisateurs peuvent modifier ce paramĂštre avec SET SESSION AUTHORIZATION. current_user est l'identifiant de l'utilisateur applicable pour les vĂ©rifications de droits. Habituellement, il est Ă©gal Ă  l'utilisateur de la session mais il peut ĂȘtre changĂ© avec SET ROLE. Il peut aussi changer durant l'exĂ©cution d'une fonction ayant l'attribut SECURITY DEFINER. Dans la parlance Unix, l'utilisateur de session est le « real user Â» et l'utilisateur courant est le « effective user Â». 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 unifie les utilisateurs et les rĂŽles en une seule entitĂ©.)

9.26.2. Fonctions d'accĂšs aux droits #

Tableau 9.68 liste les fonctions qui permettent d'accĂ©der programmatiquement aux droits d'accĂšs aux objets. (Voir Section 5.7 pour plus d'informations sur les droits.) Dans ces fonctions, l'utilisateur dont les droits sont interrogĂ©s peut ĂȘtre indiquĂ© par son nom ou son OID (pg_authid.oid), ou si le nom donnĂ© est public, alors la vĂ©rification se fait sur les droits du pseudo-rĂŽle PUBLIC. De plus, l'argument user peut ĂȘtre complĂštement omis, auquel cas la vĂ©rification se fera sur current_user. L'objet vĂ©rifiĂ© peut ĂȘtre indiquĂ© par son nom ou son OID. Dans le cas du nom, le nom du schĂ©ma peut ĂȘtre inclus si nĂ©cessaire. Le droit d'accĂšs d'intĂ©rĂȘt est indiquĂ© par une chaĂźne de caractĂšres qui doit correspondre Ă  un des mots clĂ©s appropriĂ© pour le type d'objet (par exemple SELECT). En option, WITH GRANT OPTION peut ĂȘtre ajoutĂ© au type de droit pour tester si le droit contient cette option. De plus, plusieurs types de droits peuvent ĂȘtre listĂ©s en les sĂ©parant par des virgules, auquel cas le rĂ©sultat sera vrai si un des droits est dĂ©tenu (la casse n'est pas significative et les espaces blancs supplĂ©mentaires sont autorisĂ©s entre les noms des droits, mais pas Ă  l'intĂ©rieur des noms.) Quelques exemples :

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

Tableau 9.68. Fonctions d'accĂšs aux droits

Fonction

Description

has_any_column_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour une colonne de la table ? Ceci rĂ©ussit si le droit est dĂ©tenu pour la table entiĂšre ou s'il est dĂ©tenu par au moins une colonne de la table. Les droits autorisĂ©s sont SELECT, INSERT, UPDATE et REFERENCES.

has_column_privilege ( [ user name or oid, ] table text or oid, column text or smallint, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour la colonne spĂ©cifiĂ© de la table ? Ceci rĂ©ussit si le droit est dĂ©tenu pour la table entiĂšre ou s'il est dĂ©tenu par cette colonne de la table. La colonne peut ĂȘtre spĂ©cifiĂ©e par son nom ou son numĂ©ro d'attribut (pg_attribute.attnum). Les droits autorisĂ©s sont SELECT, INSERT, UPDATE et REFERENCES.

has_database_privilege ( [ user name or oid, ] database text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour la base ? Les droits autorisĂ©s sont CREATE, CONNECT, TEMPORARY et TEMP (qui est Ă©quivalent Ă  TEMPORARY).

has_foreign_data_wrapper_privilege ( [ user name or oid, ] fdw text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le foreign data wrapper ? Le seul droit autorisĂ© est USAGE.

has_function_privilege ( [ user name or oid, ] function text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour la fonction ? Le seul droit autorisĂ© est EXECUTE.

Lors de la spĂ©cification d'une fonction par nom, plutĂŽt que par OID, l'entrĂ©e autorisĂ©e est la mĂȘme que pour le type de donnĂ©es regprocedure (voir Section 8.19). En voici un exemple :

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

has_language_privilege ( [ user name or oid, ] language text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le langage ? Le seul droit autorisĂ© est USAGE.

has_parameter_privilege ( [ user name or oid, ] parameter text, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour configurer ce paramĂštre ? Le nom du paramĂštre est insensible Ă  la casse. Les droits autorisĂ©s sont SET et ALTER SYSTEM.

has_schema_privilege ( [ user name or oid, ] schema text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le schĂ©ma ? Les droits autorisĂ©s sont CREATE et USAGE.

has_sequence_privilege ( [ user name or oid, ] sequence text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour la sĂ©quence ? Les droits autorisĂ©s sont USAGE, SELECT et UPDATE.

has_server_privilege ( [ user name or oid, ] server text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le serveur distant ? Le seul droit autorisĂ© est USAGE.

has_table_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour la table ? Les droits autorisĂ©s sont SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES et TRIGGER.

has_tablespace_privilege ( [ user name or oid, ] tablespace text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le tablespace ? Le seul droit autorisĂ© est CREATE.

has_type_privilege ( [ user name or oid, ] type text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le type de donnĂ©es ? Le seul droit autorisĂ© est USAGE. Lors de la spĂ©cification d'un type par son nom plutĂŽt que par son OID, l'entrĂ©e autorisĂ©e est la mĂȘme que pour le type de donnĂ©es regtype (voir Section 8.19).

pg_has_role ( [ user name or oid, ] role text or oid, privilege text ) → boolean

Est-ce que l'utilisateur a le droit pour le rĂŽle ? Les droits autorisĂ©s sont MEMBER, USAGE et SET. MEMBER dĂ©note une appartenance de groupe directe ou indirecte dans le rĂŽle sans regard aux droits spĂ©cifiques pouvant ĂȘtre confĂ©rĂ©s. USAGE dĂ©note si les droits de ce rĂŽle sont immĂ©diatement disponibles sans exĂ©cuter SET ROLE, alors que SET dĂ©note s'il est possible de changer ce rĂŽle en utilisant la commande SET ROLE command. WITH ADMIN OPTION ou WITH GRANT OPTION peuvent ĂȘtre ajoutĂ©s Ă  un de ces types de droits si le droit ADMIN est dĂ©tenu (les quatre syntaxes testent la mĂȘme chose). Cette fonction n'autorise pas le cas spĂ©cial de configurer user Ă  public, car le pseudo-rĂŽle PUBLIC ne peut jamais ĂȘtre un membre d'un vrai rĂŽle.

row_security_active ( table text or oid ) → boolean

Est-ce que la sĂ©curitĂ© niveau ligne est active pour la table dans le contexte de l'utilisateur et de l'environnement actuels ?


Tableau 9.69 montre les opĂ©rateurs disponibles pour le type aclitem, qui est la reprĂ©sentation catalogue pour les droits d'accĂšs. Voir Section 5.7 pour des informations sur la lecture des droits d'accĂšs.

Tableau 9.69. OpĂ©rateurs aclitem

Opérateur

Description

Exemple(s)

aclitem = aclitem → boolean

Est-ce que les aclitem sont identiques ? (Notez que le type aclitem manque de l'ensemble habituel d'opĂ©rateurs de comparaison ; il n'a que l'Ă©galitĂ©. Cependant, les tableaux aclitem peuvent seulement ĂȘtre comparĂ©s par Ă©galitĂ©.)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem → f

aclitem[] @> aclitem → boolean

Est-ce que le tableau contient les droits indiquĂ©s ? (Ceci vaut true s'il existe une entrĂ©e de tableau qui correspond Ă  l'aclitem et a au moins l'ensemble indiquĂ© de droits.)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem → t

aclitem[] ~ aclitem → boolean

Alias obsolĂšte pour @>.

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem → t


Tableau 9.69 montre quelques fonctions supplĂ©mentaires pour la gestion du type aclitem.

Tableau 9.70. Fonctions aclitem

Fonction

Description

acldefault ( type "char", ownerId oid ) → aclitem[]

Construit un tableau d'aclitem dĂ©tenant les droits d'accĂšs par dĂ©faut d'un objet de type type appartenant au rĂŽle d'OID ownerId. Ceci reprĂ©sente les droits d'accĂšs supposĂ©s quand une entrĂ©e ACL d'un objet est NULL. (Les droits d'accĂšs par dĂ©faut sont dĂ©crits dans Section 5.7.) Le paramĂštre type doit faire partie de 'c' pour COLUMN, 'r' pour TABLE ainsi que les objets de type table, 's' pour SEQUENCE, 'd' pour DATABASE, 'f' pour FUNCTION ou PROCEDURE, 'l' pour LANGUAGE, 'L' pour LARGE OBJECT, 'n' pour SCHEMA, 'p' pour PARAMETER, 't' pour TABLESPACE, 'F' pour FOREIGN DATA WRAPPER, 'S' pour FOREIGN SERVER, ou 'T' pour TYPE ou DOMAIN.

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

Renvoie le tableau the aclitem sous la forme d'un ensemble de lignes. Si le bĂ©nĂ©ficiaire est le pseudo-rĂŽle PUBLIC, il est reprĂ©sentĂ© par zĂ©ro dans la colonne grantee. Chaque droit donnĂ© est reprĂ©sentĂ© sous la forme SELECT, INSERT, etc (voir Tableau 5.1 pour une liste complĂšte). Notez que chaque droit est sĂ©parĂ© sur sa propre ligne, donc un seul mot clĂ© apparaĂźt dans la colonne privilege_type.

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

Construit un aclitem avec les propriétés données. privileges est une liste de noms de droits (par exemple SELECT, toutes étant indiquées dans le résultat. (Le cas de la chaßne de droits n'est pas significatif, et les espaces blancs supplémentaires sont autorisés entre, mais pas à l'intérieur des noms de droits.)


9.26.3. Fonctions de vĂ©rification de la visibilitĂ© #

Tableau 9.71 montre les fonctions qui dĂ©terminent si un certain objet est visible dans le chelub de recherche de schĂ©mas courant. Par exemple, une table est dite visible si le schĂ©ma qui la contient est dans le chemin de recherche. C'est Ă©quivalent au fait que la table doit ĂȘtre rĂ©fĂ©rencĂ©e par nom sans qualification explicite par d'un schĂ©ma. De ce fait, pour lister les noms des tables visibles :

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

Pour les fonctions et opĂ©rateurs, un objet dans le chemin de recherche est dit visible si aucun objet du mĂȘme nom et du mĂȘme type se trouve avant dans le chemin. Pour les classes et familles d'opĂ©rateur, le nom et la mĂ©thode d'accĂšs associĂ© de l'index sont considĂ©rĂ©s.

Tableau 9.71. Fonctions de vĂ©rification de la visibilitĂ©

Fonction

Description

pg_collation_is_visible ( collation oid ) → boolean

La collation est-elle 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 ? (Ceci fonctionne aussi pour les procĂ©dures et les agrĂ©gats.)

pg_opclass_is_visible ( opclass oid ) → boolean

La classe d'opĂ©rateurs 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_statistics_obj_is_visible ( stat oid ) → boolean

L'objet statistique est-il visible dans le chemin de recherche ?

pg_table_is_visible ( table oid ) → boolean

La table est-elle visible dans le chemin de recherche ? (Cela fonctionne aussi pour tous les types de relations, ceci incluant les vues, les vues matĂ©rialisĂ©es, les sĂ©quences et les tables externes.)

pg_ts_config_is_visible ( config oid ) → boolean

La configuration de recherche plein texte est-elle visible dans le chemin de recherche ?

pg_ts_dict_is_visible ( dict oid ) → boolean

Le dictionnaire de recherche plein texte est-il visible dans le chemin de recherche ?

pg_ts_parser_is_visible ( parser oid ) → boolean

L'analyseur de recherche plein texte est-il visible dans le chemin de recherche ?

pg_ts_template_is_visible ( template oid ) → boolean

Le modĂšle de recherche plein texte 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 ?


Toutes ces fonctions requiĂšrent les OID des objets pour identifier l'objet Ă  vĂ©rifier. Si vous voulez tester un objet par son nom, il est prĂ©fĂ©rable d'utiliser les types d'alias de l'OID (regclass, regtype, regprocedure, regoperator, regconfig ou regdictionary), par exemple :

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

Notez qu'il n'y aurait pas de sens Ă  tester un nom de type non qualifiĂ© par son schĂ©ma de cette façon -- si le nom peut ĂȘtre reconnu, c'est qu'il est visible.

9.26.4. Focntions d'information sur les catalogues systĂšmes #

Tableau 9.72 liste les fonctions qui extraient des informations des catalogues systĂšmes.

Tableau 9.72. Fonctions d'information sur les catalogues systĂšmes

Fonction

Description

format_type ( type oid, typemod integer ) → text

Renvoie le nom SQL pour un type de données identifié par l'OID type et potentiellement par un modifieur de type. Envoyez NULL pour le modifieur si aucun modifieur spécifique n'est connu.

pg_char_to_encoding ( encoding name ) → integer

Convertit le nom d'encodage fourni en un entier représentant l'identifiant interne utilisé dans certains catalogues systÚmes. Renvoie -1 si le nom d'encodage fourni est inconnu.

pg_encoding_to_char ( encoding integer ) → name

Convertit l'entier utilisé comme identifiant interne d'encodage pour certains catalogues systÚmes en une chaßne lisible par un humain. Renvoie une chaßne vide si le numéro d'encodage fourni est invalide.

pg_get_catalog_foreign_keys () → setof record ( fktable regclass, fkcols text[], pktable regclass, pkcols text[], is_array boolean, is_opt boolean )

Retourne un ensemble de lignes dĂ©crivant les clĂ©s Ă©trangĂšres qui existent dans le catalogue systĂšme de PostgreSQL. La colonne fktable contient le nom du catalogue rĂ©fĂ©rent, et la colonne fkcols contient le(s) nom(s) de(s) colonne(s) rĂ©fĂ©rente(s). De mĂȘme, la colonne pktable contient le nom du catalogue rĂ©fĂ©rencĂ©, et la colonne pkcols contient le(s) nom(s) de(s) colonne(s) rĂ©fĂ©rencĂ©e(s). Si is_array vaut true, la derniĂšre colonne rĂ©fĂ©rente est un tableau, dont chaque Ă©lĂ©ment doit correspondre Ă  une entrĂ©e du catalogue rĂ©fĂ©rencĂ©. Si is_opt vaut true, la(les) colonne(s) rĂ©fĂ©rente(s) est(sont) autorisĂ©e(s) Ă  contenir des zĂ©ros au lieu d'une rĂ©fĂ©rence valide.

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

Reconstruit la commande de création pour une contrainte. (Ceci est une reconstruction décompilée, pas le texte original de la commande.)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

DĂ©compile la forme interne de l'expression stockĂ©e dans les catalogues systĂšmes, telle que la valeur par dĂ©faut pour une colonne. Si l'expression peut contenir Vars, indiquez l'OID de la relation Ă  laquelle elles font rĂ©fĂ©rence dans le deuxiĂšme paramĂštre ; si aucun Var n'est attendu, indiquer 0 est suffisant.

pg_get_functiondef ( func oid ) → text

Reconstruit la commande de création pour une fonction ou une procédure. (C'est une reconstruction décompilée, pas le texte original de la commande.) Le résultat est une instruction complÚte, CREATE OR REPLACE FUNCTION ou CREATE OR REPLACE PROCEDURE.

pg_get_function_arguments ( func oid ) → text

Reconstruit la liste d'argument d'une fonction ou procĂ©dure, dans la forme oĂč elle devrait apparaĂźtre dans un CREATE FUNCTION (en incluant les valeurs par dĂ©faut).

pg_get_function_identity_arguments ( func oid ) → text

Reconstruit la liste d'arguments nécessaire pour identifier une fonction ou une procédure, sous la forme nécessaire pour intégrer une commande telle que ALTER FUNCTION. Cette forme omet les valeurs par défaut.

pg_get_function_result ( func oid ) → text

Reconstruit la clause RETURNS d'une function, dans la forme nécessaire pour apparaßtre dans CREATE FUNCTION. Renvoie NULL pour une procédure.

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

Reconstruit la commande de création pour un index (C'est une reconstruction décompilée, et non pas le texte original de la commande.) Si column est fourni et est différent de zéro, seule la définition de cette colonne est reconstruite.

pg_get_keywords () → setof record ( word text, catcode "char", barelabel boolean, catdesc text, baredesc text )

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 un mot clĂ© non rĂ©servĂ©, C pour un mot clĂ© qui peut ĂȘtre un nom de colonne, T pour un mot clĂ© qui peut ĂȘtre un nom de type ou de fonction, R pour un mot totalement rĂ©servĂ©. La colonne barelabel contient true si le mot clĂ© peut ĂȘtre utilisĂ© comme un nom de colonne strict dans les listes de SELECT, ou false si il ne peut ĂȘtre utilisĂ© qu'aprĂšs AS. La colonne catdesc contient une chaĂźne potentiellement localisĂ©e dĂ©crivant la catĂ©gorie du mot clĂ©. La colonne baredesc contient une chaĂźne potentiellement localisĂ©e dĂ©crivant l'Ă©tat de l'Ă©tiquette de la colonne du mot clĂ©.

pg_get_partkeydef ( table oid ) → text

Reconstruit la définition d'une clé de partitionnement pour une table partitionnée, sous la forme nécessaire pour une clause PARTITION BY d'un CREATE TABLE. (Il s'agit d'une reconstruction, pas du texte original de la commande.)

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

Reconstruit la commande de création pour une rÚgle. (C'est une reconstruction décompilée, et non pas le texte original de la commande.)

pg_get_serial_sequence ( table text, column text ) → text

Renvoie le nom de la sĂ©quence associĂ©e Ă  une colonne ou NULL si aucune sĂ©quence n'est associĂ©e Ă  la colonne. Si la colonne est une colonne identitĂ©, la sĂ©quence associĂ©e est la sĂ©quence créée en interne pour cette colonne. Pour les colonnes créées en utilisant un des types serial (serial, smallserial, bigserial), il s'agit de la sĂ©quence crĂ©e pour la dĂ©finition de la colonne serial. Dans ce dernier cas, l'association peut ĂȘtre modifiĂ©e ou supprimĂ©e avec ALTER SEQUENCE OWNED BY. (Cette fonction aurait due s'appeler pg_get_owned_sequence ; son nom actuel reflĂšte le fait qu'elle Ă©tait historiquement utilisĂ©e avec des colonnes serial.) Le premier paramĂštre est un nom de tableau avec le schĂ©ma en option, et le deuxiĂšme paramĂštre est un nom de colonne. Comme le premier paramĂštre contient potentiellement un nom de schĂ©ma et un nom de table, il est analysĂ© suivant les rĂšgles SQL habituelles, signifiant qu'il est mis en minuscule par dĂ©faut. Le second paramĂštre, Ă©tant juste un nom de colonne, est traitĂ© littĂ©ralement et conserve donc sa casse. Le rĂ©sultat est formatĂ© de façon convenable pour ĂȘtre donnĂ© Ă  des fonctions de sĂ©quence (voir Section 9.17).

Une utilisation typique est la lecture de la valeur actuelle d'une sĂ©quence pour une colonne identitĂ© ou serial. Par exemple :

SELECT currval(pg_get_serial_sequence('sometable', 'id'));
     

pg_get_statisticsobjdef ( statobj oid ) → text

Reconstruit le commande de création d'un objet statistique étendu. (Ceci est une reconstruction décompilée, par le texte de la commande originale.)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

Reconstruit la commande de création d'un trigger. (Ceci est une reconstruction décompilée, par le texte de la commande originale.)

pg_get_userbyid ( role oid ) → name

Renvoie le nom d'un rĂŽle d'aprĂšs son OID.

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

Reconstruit la commande SELECT sous-jacente pour une vue ou une vue matérialisée. (Ceci est une reconstruction décompilée, par le texte de la commande originale.)

pg_get_viewdef ( view oid, wrap_column integer ) → text

Reconstruit la commande SELECT sous-jacente pour une vue ou une vue matérialisée. (Ceci est une reconstruction décompilée, par le texte de la commande originale.) Dans cette forme de la fonction, l'affichage joli est toujours activé, et les longues lignes sont coupées pour essayer de les conserver plus petites que le nombre indiqué de colonnes.

pg_get_viewdef ( view text [, pretty boolean ] ) → text

Reconstruit la commande SELECT sous-jacente pour une vue ou une vue matĂ©rialisĂ©e, en travaillant Ă  partir d'un nom pour la vue plutĂŽt que de son OID. (Ceci est obsolĂšte ; utilisez la variante OID Ă  la place.)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

Teste si une colonne d'index a la propriĂ©tĂ© nommĂ©e. Les propriĂ©tĂ©s communes de colonne d'index sont listĂ©es dans Tableau 9.73. (Notez que les mĂ©thodes d'accĂšs d'extension peuvent dĂ©finir des noms de propriĂ©tĂ© supplĂ©mentaires pour leurs index.) NULL est renvoyĂ© si le nom de la propriĂ©tĂ© n'est pas connu ou ne s'applique pas Ă  l'objet particulier ou si l'OID ou le numĂ©ro de colonne n'identifie pas un objet valide.

pg_index_has_property ( index regclass, property text ) → boolean

Teste si un index a la propriĂ©tĂ© nommĂ©e. Les propriĂ©tĂ©s communes d'index sont listĂ©es dans Tableau 9.74. (Notez que les mĂ©thodes d'accĂšs d'extension peuvent dĂ©finir des noms de propriĂ©tĂ© supplĂ©mentaires pour leurs index.) NULL est renvoyĂ© si le nom de la propriĂ©tĂ© n'est pas connu ou ne s'applique pas Ă  l'objet particulier ou si l'OID n'identifie pas un objet valide.

pg_indexam_has_property ( am oid, property text ) → boolean

Teste si une mĂ©thode d'accĂšs aux index a la propriĂ©tĂ© nommĂ©e. Les propriĂ©tĂ©s communes des mĂ©thodes d'accĂšs aux index sont listĂ©es dans Tableau 9.75. NULL est renvoyĂ© si le nom de la propriĂ©tĂ© n'est pas connu ou ne s'applique pas Ă  l'objet particulier ou si l'OID n'identifie pas un objet valide.

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

Renvoie l'ensemble d'options de stockage représenté par une valeur à partir de pg_class.reloptions ou pg_attribute.attoptions.

pg_settings_get_flags ( guc text ) → text[]

Renvoie un tableau de drapeaux associĂ©s avec le paramĂštre donnĂ© ou NULL s'il n'existe pas. Le rĂ©sultat est un tableau vide si le paramĂštre existe mais qu'aucun drapeau n'existe pour lui. Seuls les drapeaux les plus utiles listĂ©s dans Tableau 9.76 sont exposĂ©s.

pg_tablespace_databases ( tablespace oid ) → setof oid

Renvoie l'ensemble d'OID des bases ayant des objets dans le tablespace indiquĂ©. Si cette fonction renvoie des lignes, le tablespace n'est pas vide et ne peut pas ĂȘtre supprimĂ©. Pour identifier les objets spĂ©cifiques peuplant le tablespace, vous aurez besoin de vous connecter aux bases identifiĂ©es par pg_tablespace_databases et de requĂȘter leurs catalogues pg_class.

pg_tablespace_location ( tablespace oid ) → text

Renvoie le chemin du systĂšme de fichiers oĂč ce tablespace est situĂ©.

pg_typeof ( "any" ) → regtype

Renvoie l'OID du type de donnĂ©es de la valeur qui lui est fournie. Ceci peut ĂȘtre utile pour dĂ©bogguer ou pour construire dynamiquement des requĂȘtes SQL. Cette fonction est dĂ©clarĂ©e renvoyer le type regtype, qui est un alias d'OID pour les objets types de donnĂ©es (voir Section 8.19) ; ceci signifie qu'il est identique Ă  un OID pour des comparaisons mais qu'il s'affiche sous la forme du nom du type.

Par exemple :

SELECT pg_typeof(33);
 pg_typeof
-----------
 integer

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

COLLATION FOR ( "any" ) → text

Renvoie le nom de la collation de la valeur qui lui est fournie. La valeur est entre guillemet et qualifiée du schéma si nécessaire. Si aucune collation n'a été dérivée de l'expression de l'argument, alors NULL est renvoyée. Si l'argument n'est pas un type de données collationnable, alors une erreur est levée.

Par exemple :

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

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

to_regclass ( text ) → regclass

Traduit un nom de relation en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regclass (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regcollation ( text ) → regcollation

Traduit un nom de collation en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regcollation (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regnamespace ( text ) → regnamespace

Traduit un nom de schĂ©ma en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regnamespace (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regoper ( text ) → regoper

Traduit un nom d'opĂ©rateur en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regoper (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ© ou est ambigĂŒ.

to_regoperator ( text ) → regoperator

Traduit un nom d'opĂ©rateur en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regoperator (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regproc ( text ) → regproc

Traduit un nom de fonction ou procĂ©dure en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regproc (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ© ou est ambigĂŒ.

to_regprocedure ( text ) → regprocedure

Traduit un nom de fonction ou procĂ©dure en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regprocedure (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regrole ( text ) → regrole

Traduit un nom de rĂŽle en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regrole (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.

to_regtype ( text ) → regtype

Traduit un nom de type en son OID. Un rĂ©sultat similaire est obtenu en convertissant la chaĂźne dans le type regtype (voir Section 8.19) ; nĂ©anmoins, cette fonction renverra NULL plutĂŽt que de lever une erreur si le nom n'est pas trouvĂ©.


La plupart des fonctions qui reconstruisent (dĂ©compilent) des objets de base ont un drapeau pretty, qui Ă  true, cause que le rĂ©sultat soit « joliment affichĂ© Â». Un bel affichage supprime les parenthĂšses inutiles et ajoute des espaces blancs pour la lisibilitĂ©. Ce format est plus lisible mais le format par dĂ©faut a plus de chance d'ĂȘtre interprĂ©tĂ© de la mĂȘme façon par les versions futures de PostgreSQL ; pour Ă©viter d'utiliser une sortie joliment affichĂ©e pour les sauvegardes. Configurer false pour le paramĂštre pretty donne le mĂȘme rĂ©sultat que d'omettre le paramĂštre.

Tableau 9.73. PropriĂ©tĂ©s des colonnes d'un index

NomDescription
ascEst-ce que la colonne trie en ordre ascendant sur un parcours en avant ?
descEst-ce que la colonne trie en ordre descendant sur un parcours en avant ?
nulls_firstEst-ce que la colonne trie les valeurs NULL en premier sur un parcours en avant ?
nulls_lastEst-ce que la colonne trie les valeurs NULL en dernier sur un parcours en avant ?
orderableEst-ce que la colonne possĂšde un ordre de tri dĂ©fini ?
distance_orderableEst-ce que la colonne peut ĂȘtre parcourue en ordre par un opĂ©rateur « distance Â», par exemple ORDER BY col <-> constant ?
returnableEst-ce que la valeur de la colonne peut ĂȘtre renvoyĂ©e par un parcours d'index seul ?
search_arrayEst-ce que la colonne supporte nativement les recherches col = ANY(array) ?
search_nullsEst-ce que la colonne supporte les recherches IS NULL et IS NOT NULL ?

Tableau 9.74. PropriĂ©tĂ©s des index

NomDescription
clusterableL'index peut-il ĂȘtre utilisĂ© dans une commande CLUSTER ?
index_scanL'index supporte-t-il les parcours simples (non bitmap) ?
bitmap_scanL'index supporte-t-il les parcours bitmap ?
backward_scanEst-ce que la direction du parcours peut ĂȘtre changĂ©e en milieu de parcours (pour accepter FETCH BACKWARD sur un curseur sans nĂ©cessiter de matĂ©rialisation) ?

Tableau 9.75. PropriĂ©tĂ©s des mĂ©thodes d'accĂšs aux index

NomDescription
can_orderEst-ce que la mĂ©thode d'accĂšs supporte ASC, DESC et les autres mots-clĂ©s dans CREATE INDEX ?
can_uniqueEst-ce que la mĂ©thode d'accĂšs supporte les index d'unicitĂ© ?
can_multi_colEst-ce que la mĂ©thode d'accĂšs supporte les index multi-colonnes ?
can_excludeEst-ce que la mĂ©thode d'accĂšs supporte les contraintes d'exclusion ?
can_includeEst-ce que la mĂ©thode d'accĂšs supporte la clause INCLUDE de CREATE INDEX ?

Tableau 9.76. Drapeaux des GUC

DrapeauDescription
EXPLAINLes paramĂštres disposant de ce drapeau sont inclus dans les commandes EXPLAIN (SETTINGS).
NO_SHOW_ALLLes paramĂštres disposant de ce drapeau sont exclus des commandes SHOW ALL.
NO_RESETLes paramĂštres disposant de ce drapeau n'acceptent pas les commandes RESET.
NO_RESET_ALLLes paramĂštres disposant de ce drapeau sont exclus des commandes RESET ALL.
NOT_IN_SAMPLELes paramÚtres disposant de ce drapeau ne sont pas inclus par défaut dans postgresql.conf.
RUNTIME_COMPUTEDLes paramÚtres disposant de ce drapeau sont calculés à l'exécution.

9.26.5. Fonctions d'information et d'adressage des objets #

Tableau 9.77 liste les fonctions relatives Ă  l'identification et l'adressage des objets de la base.

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

Fonction

Description

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

Renvoie une description textuelle d'un objet de base identifiĂ© par un OID de catalogue, un OID d'objet, et un identifiant de sous-objet (tel que le numĂ©ro de colonne dans une table ; cet identifiant vaut zĂ©ro lorsqu'il rĂ©fĂ©rence un objet complet). Cette description a pour but d'ĂȘtre lisible par un humain, et pourrait ĂȘtre traduite, suivant la configuration du serveur. C'est particuliĂšrement utile pour dĂ©terminer l'identitĂ© d'un objet rĂ©fĂ©rencĂ© dans le catalogue pg_depend. Cette fontion retourne des valeurs NULL pour les objets non dĂ©finis.

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

Renvoie une ligne contenant suffisamment d'informations pour identifier de façon unique l'objet de la base spĂ©cifiĂ© par un OID de catalogue, un OID d'objet et un identifiant de sous-objet. Cette information a pour but d'ĂȘtre lisible par un logiciel et n'est jamais traduite. type identifie le type d'objet de base ; schema est le nom du schĂ©ma auquel l'objet appartient ou NULL pour les types d'objet n'appartenant pas Ă  des schĂ©mas ; name est le nom de l'objet, entre guillemets si nĂ©cessaire, si le nom (avec le nom du schĂ©ma le cas Ă©chĂ©ant) est suffisant pour identifier de façon unique l'objet, et NULL sinon ; identity est l'identitĂ© complĂšte de l'objet, avec le format prĂ©cis dĂ©pendant du type d'objet, et chaque nom dans le format habituel (qualification avec le schĂ©ma et guillemets doubles si nĂ©cessaire). Les objets non dĂ©finis sont identifiĂ©s par des valeurs NULL.

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

Renvoie une ligne contenant suffisamment d'informations pour identifier de façon unique l'objet de la base spĂ©cifiĂ© par un OID de catalogue, un OID d'objet et un identifiant de sous-objet. L'information renvoyĂ© est indĂ©pendante du serveur, autrement dit il pourrait ĂȘtre utilisĂ© pour idenfier un objet pareillement nommĂ© sur un autre serveur. type identifie le type d'objet de base ; object_names et object_args sont des tableaux de texte qui forment ensemble une rĂ©fĂ©rence Ă  l'objet. Ces trois valeurs peuvent ĂȘtre passĂ©es Ă  pg_get_object_address pour obtenir l'adresse interne de l'objet.

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

Renvoie une ligne contenant suffisamment d'informations pour identifier de façon unique l'objet de base spĂ©cifiĂ© par le code type et le nom d'objet et les tableaux d'arguments. Les valeurs renvoyĂ©es sont celles qui seraient utilisĂ©es dans les catalogues systĂšmes tels que pg_depend ; elles peuvent ĂȘtre fournies Ă  d'autres fonctions systĂšmes telles que pg_describe_object ou pg_identify_object. classid est l'OID du catalogue systĂšme contenant l'objet ; objid est l'OID de l'objet lui-mĂȘme et objsubid est l'identifiant du sous-objet ou 0 si aucun. Cette fonction est l'inverse de pg_identify_object_as_address. Les objets non dĂ©finis sont identifiĂ©s par des valeurs NULL.


9.26.6. Fonctions d'informations sur les commentaires #

Les fonctions listĂ©es dans Tableau 9.78 extraient les commentaires prĂ©alablement enregistrĂ©s avec la commande COMMENT. Une valeur NULL est renvoyĂ©e si aucun commentaire n'a Ă©tĂ© trouvĂ© pour les paramĂštres donnĂ©s.

Tableau 9.78. Fonctions d'informations sur les commentaires

Fonction

Description

col_description ( table oid, column integer ) → text

Renvoie le commentaire pour une colonne de table, qui est spĂ©cifiĂ© par l'OID de la table et le numĂ©ro de colonne. (obj_description ne peut ĂȘtre utilisĂ© pour les colonnes d'une table car les colonnes n'ont pas d'OID propre.)

obj_description ( object oid, catalog name ) → text

Renvoie le commentaire pour un objet de la base qui est spécifié par son OID et le nom du catalogue systÚme le contenant. Par exemple, obj_description(123456, 'pg_class') récupérera le commentaire de la table d'OID 123456.

obj_description ( object oid ) → text

Renvoie le commentaire pour un objet de la base spĂ©cifiĂ© par son seul OID. Cette fonction est obsolĂšte cat il n'existe aucune garantie que les OID soient uniques entre diffĂ©rents catalogues systĂšmes ; de ce fait, un mauvais commentaire pourrait ĂȘtre renvoyĂ©.

shobj_description ( object oid, catalog name ) → text

Renvoie le commentaire pour un objet de base partagé, spécifié par son OID et le nom du catalogue systÚme le contenant. C'est comme obj_description, sauf que c'est utilisé pour récupérer les commentaires sur les objets partagés (donc les bases, les rÎles et les tablespaces). Certains catalogues systÚmes sont globaux à toutes les bases d'une instance, et les descriptions de ces objects sont stockées là-aussi globalement.


9.26.7. Fonctions de vĂ©rification de validitĂ© des donnĂ©es #

Les fonctions affichĂ©es dans Tableau 9.79 peuvent ĂȘtre utiles pour vĂ©rifier la validitĂ© des donnĂ©es proposĂ©es en entrĂ©e.

Tableau 9.79. Fonctions de vĂ©rification de validitĂ© des donnĂ©es

Fonction

Description

Exemple(s)

pg_input_is_valid ( string text, type text ) → boolean

Teste si l'argument string donné est une entrée valide pour le type de données indiquée, et renvoie true ou false.

Cette fonction ne fonctionnera bien que si la fonction en entrĂ©e du type de donnĂ©es a Ă©tĂ© mise Ă  jour pour indiquer une entrĂ©e invalide sous la forme d'une erreur « douce Â». Sinon l'entrĂ©e invalide annulera la transaction, exactement comme si la chaĂźne avait Ă©tĂ© convertie directement dans ce type.

pg_input_is_valid('42', 'integer') → t

pg_input_is_valid('42000000000', 'integer') → f

pg_input_is_valid('1234.567', 'numeric(7,4)') → f

pg_input_error_info ( string text, type text ) → record ( message text, detail text, hint text, sql_error_code text )

Teste si l'argument string indiquée est une entrée valide pour le type de données indiqué. Dans le cas contraire, elle renvoie les détails de l'erreur qu'elle aurait dû renvoyer. Si l'entrée est valide, les résultats sont NULL. Les entrées sont identiques à pg_input_is_valid.

Cette fonction ne fonctionnera correctement que si la fonction en entrĂ©e du type de donnĂ©es a Ă©tĂ© mis Ă jour pour indiquer une entrĂ©e invalide sous la forme d'une erreur « douce Â». Dans le cas contraire, l'entrĂ©e invalide annulera la transaction, exactement comme si la chaĂźne avait Ă©tĂ© convertie directement dans le type.

select * from pg_input_error_info('42000000000', 'integer') →

                       message                        | detail | hint | sql_error_code
------------------------------------------------------+--------+------+----------------
 value "42000000000" is out of range for type integer |        |      | 22003

select message, detail from pg_input_error_info('1234.567', 'numeric(7,4)') →

        message         |                                      detail
------------------------+----------------------------------​-------------------------------------------------
 numeric field overflow | A field with precision 7, scale 4 must round to an absolute value less than 10^3.


9.26.8. Fonctions d'informations sur les identifiants de transactions et sur les snapshots #

Les fonctions listĂ©es dans Tableau 9.80 fournissent des informations sur la transaction serveur dans un format exportable. L'utilisation principale de ces fonctions est de dĂ©terminer les transactions validĂ©es entre deux images de base.

Tableau 9.80. Fonctions d'identifiants de transaction et d'informations sur les images de base

Fonction

Description

age ( xid ) → integer

Renvoie le nombre de transactions entre l'identifiant de transaction indiqué et le compteur de transaction.

mxid_age ( xid ) → integer

Renvoie le nombre d'identifiants MultiXact entre l'identifiant MultiXact indiqué et le compteur multixacts.

pg_current_xact_id () → xid8

Renvoie l'identifiant actuel de la transaction. Il sera affectĂ© si la transaction n'en a pas dĂ©jĂ  un (ceci arrive si elle n'a pas encore rĂ©alisĂ© d'Ă©critures sur la base) ; voir Section 74.1 pour les dĂ©tails. Si exĂ©cutĂ©e dans une sous-transaction, elle renverra l'identifiant de transaction du niveau haut ; voir Section 74.3 pour les dĂ©tails.

pg_current_xact_id_if_assigned () → xid8

Renvoie l'identifiant actuel de la transaction ou NULL si aucun identifiant n'a encore été assigné. (Il est préférable d'utiliser cette variante si la transaction est habituellement en lecture seule pour éviter de consommer inutilement un identifiant de transaction.) Si exécutée dans une sous-transaction, elle renverra l'identifiant de transaction du niveau haut.

pg_xact_status ( xid8 ) → text

Renvoie le statut de validation d'une transaction rĂ©cente. Le rĂ©sultat fait partie de in progress, committed ou aborted, en supposant que la transaction est suffisamment rĂ©cente pour que le systĂšme dispose du statut de validation de cette transaction. S'il est assez ancien pour qu'aucune rĂ©fĂ©rence de la transaction n'est survĂ©cu au systĂšme et que le statut de validation ait disparu, le rĂ©sultat est NULL. Les applications peuvent utiliser cette fonction pour dĂ©terminer, par exemple, si leur transaction a Ă©tĂ© validĂ©e ou annulĂ©e si l'application a Ă©tĂ© dĂ©connectĂ©e alors qu'un COMMIT Ă©tait en cours. Notez que les transactions prĂ©parĂ©es sont rapportĂ©s en cours ; les applications doivent vĂ©rifier pg_prepared_xacts si elles ont besoin de savoir si un identifiant de transaction appartient Ă  une transaction prĂ©parĂ©e.

pg_current_snapshot () → pg_snapshot

Renvoie un snapshot (image) actuel, une structure de donnĂ©es indiquant les identifiants de transaction actuellement en cours. Seuls les identifiants de transaction de niveau haut sont inclus dans le snapshot ; les identifiants de sous-transaction ne sont pas affochĂ©es ; voir Section 74.3 our les dĂ©tails.

pg_snapshot_xip ( pg_snapshot ) → setof xid8

Renvoie l'ensemble des identifiants de transactions en cours contenu dans un snapshot (image de base).

pg_snapshot_xmax ( pg_snapshot ) → xid8

Renvoie le xmax d'une image de base.

pg_snapshot_xmin ( pg_snapshot ) → xid8

Renvoie le xmin d'une image de base

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

Est-ce que l'identifiant de transaction donnĂ© est visible d'aprĂšs cette image de base (autrement dit, est-il terminĂ© avant que l'image ne soit rĂ©alisĂ©e) ? Notez que cette fonction ne renverra pas la bonne rĂ©ponse pour un identifiant de sous-transaction (subxid) ; voir Section 74.3 pour les dĂ©tails.

pg_get_multixact_members ( multixid xid ) → setof record ( xid xid, mode text )

Renvoie l'identifiant de transaction et le mode de verrou pour chaque membre de l'identifiant MultiXact indiquĂ©. Les modes de verrou forupd, fornokeyupd, sh et keysh correspondent, respectivement, aux verrous niveau ligne de FOR UPDATE, FOR NO KEY UPDATE, FOR SHARE et FOR KEY SHARE, comme dĂ©crit dans Section 13.3.2. Deux modes supplĂ©mentaires sont spĂ©cifiques aux MultiXact : nokeyupd, utilisĂ© par les mises Ă  jour qui ne modifient pas de colonnes clĂ©s, et upd, utilisĂ© par les mises Ă  jour des colonnes clĂ©s.


Le type interne des identifiants de transaction, xid, est sur 32 bits et boucle tous les 4 milliards de transactions. NĂ©anmoins, les fonctions listĂ©es dans Tableau 9.80, sauf age, mxid_age et pg_get_multixact_members, utilisent un type xid8 sur 64 bits qui ne boucle pas sur toute la durĂ©e de vie d'une instance, et qui peut ĂȘtre converti en xid par conversion si nĂ©cessaire ; voir Section 74.1 pour les dĂ©tails. Le type de donnĂ©es pg_snapshot enregistre des informations sur la visibilitĂ© des identifiants de transaction Ă  un moment particulier. Ses composants sont dĂ©crits dans Tableau 9.81. La reprĂ©sentation textuelle de pg_snapshot est xmin:xmax:xip_list. Par exemple, 10:20:10,14,15 signifie xmin=10, xmax=20, xip_list=10, 14, 15.

Tableau 9.81. Composants d'image de base

NomDescription
xmin Plus petit identifiant de transaction toujours actif. Tous les identifiants de transaction inférieurs à xmin sont soit validés et visibles, soit annulés et morts.
xmax L'identifiant de transaction aprÚs le dernier identifiant terminé. Tous les identifiants de transaction supérieurs ou égals à xmax ne sont pas encore terminés au moment de la création de l'image, et sont de ce fait invisibles.
xip_list Transactions en cours au moment de la création de l'image de base. Un identifiant de transaction qui est xmin <= X < xmax et qui n'est pas dans cette liste a déjà été terminé au moins de la création de l'image et, de ce fait, est soit visible soit mort suivant son statut de validation. Cette liste n'inclut pas les identifiants de transaction des sous-transactions (subxids).

Dans les versions de PostgreSQL antĂ©rieures Ă  la 13, le type xid8 n'existait pas, donc des variantes de ces fonctions Ă©taient fournies. Elles utilisaient le type bigint pour reprĂ©senter un identifiant sur 64 bits, avec un type de donnĂ©es pour l'image nommĂ© txid_snapshot. Ces anciennes fonctions avaient le mot txid dans leur nom. Elles sont toujours acceptĂ©es pour des raisons de compatibilitĂ© ascendante, mais pourraient ĂȘtre supprimĂ©es dans une version future. Voir Tableau 9.82.

Tableau 9.82. Fonctions obsolĂštes sur les identifiants de transactions et les informations sur les images de base

Fonction

Description

txid_current () → bigint

Voir pg_current_xact_id().

txid_current_if_assigned () → bigint

Voir pg_current_xact_id_if_assigned().

txid_current_snapshot () → txid_snapshot

Voir pg_current_snapshot().

txid_snapshot_xip ( txid_snapshot ) → setof bigint

Voir pg_snapshot_xip().

txid_snapshot_xmax ( txid_snapshot ) → bigint

Voir pg_snapshot_xmax().

txid_snapshot_xmin ( txid_snapshot ) → bigint

Voir pg_snapshot_xmin().

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

Voir pg_visible_in_snapshot().

txid_status ( bigint ) → text

Voir pg_xact_status().


9.26.9. Fonctions d'informations sur les transactions validĂ©es #

Les fonctions montrĂ©es dans Tableau 9.83 fournissent des informations sur le moment oĂč d'anciennes transactions ont Ă©tĂ© validĂ©es. Elles fournissent des informations utiles seulement quand le paramĂštre track_commit_timestamp est activĂ©, et seulement pour les transactions qui ont Ă©tĂ© validĂ©es aprĂšs l'activation du paramĂštre. L'information d'horodatage de la validation est supprimĂ©e au fil du temps pendant un nettoyage (VACUUM).

Tableau 9.83. Fonctions d'informations sur les transactions validĂ©es

Fonction

Description

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

Renvoie l'horodatage de validation d'une transaction.

pg_xact_commit_timestamp_origin ( xid ) → record ( timestamp timestamp with time zone, roident oid)

Retourne l'horodatage de validation et l'origine de réplication d'une transaction.

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone, roident oid )

Renvoie l'identifiant de transaction, l'horodatage de sa validation et l'origine de la réplication pour la derniÚre transaction validée.


9.26.10. Fonctions des donnĂ©es de contrĂŽle #

Les fonctions listĂ©es dans Tableau 9.84 affichent des informations initialisĂ©es lors de l'exĂ©cution de la commande initdb, telle que la version du catalogue. Elles affichent aussi des informations sur les Ă©critures dans les journaux de transactions et le traitement des checkpoints. Ces informations sont globales Ă  l'instance, et non pas spĂ©cifique Ă  une base. Ces fonctions fournissent la plupart des informations en utilisant la mĂȘle source que l'application pg_controldata.

Tableau 9.84. Fonctions des donnĂ©es de contrĂŽle

Fonction

Description

pg_control_checkpoint () → record

Renvoie des informations sur l'Ă©tat du checkpoint en cours, comme indiquĂ© dans Tableau 9.85.

pg_control_system () → record

Renvoie des informations sur l'Ă©tat du fichier de contrĂŽle en cours, comme indiquĂ© dans Tableau 9.86.

pg_control_init () → record

Renvoie des informations sur l'Ă©tat d'initialisation de l'instance, comme indiquĂ© dans Tableau 9.87.

pg_control_recovery () → record

Renvoie des informations sur l'Ă©tat de restauration, comme indiquĂ© dans Tableau 9.88.


Tableau 9.85. Colonnes en sortie de pg_control_checkpoint

Nom de la colonneType de données
checkpoint_lsnpg_lsn
redo_lsnpg_lsn
redo_wal_filetext
timeline_idinteger
prev_timeline_idinteger
full_page_writesboolean
next_xidtext
next_oidoid
next_multixact_idxid
next_multi_offsetxid
oldest_xidxid
oldest_xid_dbidoid
oldest_active_xidxid
oldest_multi_xidxid
oldest_multi_dbidoid
oldest_commit_ts_xidxid
newest_commit_ts_xidxid
checkpoint_timetimestamp with time zone

Tableau 9.86. Colonnes en sortie de pg_control_system

Nom de colonneType de données
pg_control_versioninteger
catalog_version_nointeger
system_identifierbigint
pg_control_last_modifiedtimestamp with time zone

Tableau 9.87. Colonnes en sortie de pg_control_init

Nom de colonneType de données
max_data_alignmentinteger
database_block_sizeinteger
blocks_per_segmentinteger
wal_block_sizeinteger
bytes_per_wal_segmentinteger
max_identifier_lengthinteger
max_index_columnsinteger
max_toast_chunk_sizeinteger
large_object_chunk_sizeinteger
float8_pass_by_valueboolean
data_page_checksum_versioninteger

Tableau 9.88. Colonnes en sortie de pg_control_recovery

Nom de colonneType de données
min_recovery_end_lsnpg_lsn
min_recovery_end_timelineinteger
backup_start_lsnpg_lsn
backup_end_lsnpg_lsn
end_of_backup_record_requiredboolean