Documentation PostgreSQL 8.1.23 > Langage SQL > Fonctions et opérateurs > Fonctions d'informations système | |
Fonctions renvoyant des ensembles | Fonctions d'administration système |
Le Tableau 9.39, « Fonctions d'informations de session » présente diverses fonctions d'extraction d'informations relatives à la session et au système.
Tableau 9.39. Fonctions d'informations de session
Nom | Type de retour | Description |
---|---|---|
current_database() | nom | nom de la base de données courante |
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 |
session_user | name | nom de l'utilisateur de session |
pg_postmaster_start_time() | timestamp with time zone | heure de démarrage de postmaster |
user | name | équivalent à current_user |
version() | text | informations de version de PostgreSQL™ |
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. 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. 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_user, session_user et user ont un statut syntaxique spécial en SQL : ils doivent être appelés sans parenthèses à droite.
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é.
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_postmaster_start_time renvoie la date et l'heure (type timestamp with time zone) du lancement de postmaster.
version renvoie une chaîne qui décrit la version du serveur PostgreSQL™.
Le Tableau 9.40, « 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.40. Fonctions de consultation des privilèges d'accès
Nom | Type de retour | Description |
---|---|---|
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_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_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 e 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 |
pg_has_role(utilisateur, rôle, privilège) | boolean | utilisateur a-t-il le privilège privilège sur rôle |
pg_has_role(rôle, privilège) | boolean | l'utilisateur courant a-t-il le privilège privilège sur rôle |
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_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_table_privilege vérifie si l'utilisateur peut accéder à une table d'une façon particulière. L'utilisateur peut être spécifié par son nom ou par son OID (pg_authid.oid). Si l'argument est omis, current_user est pris par défaut. La table peut être spécifiée par nom ou par son OID (du coup, il n'y a que six variantes de has_table_privilege pouvant être distinguées par leur nombre et le type de leurs arguments). En spécifiant un nom, il est possible de le qualifier par celui du schéma si nécessaire. Le type de droit d'accès désiré est spécifié par une chaîne de texte qui doit être évalué par une des valeurs SELECT, INSERT, UPDATE, DELETE, RULE, REFERENCES ou TRIGGER (néanmoins, la casse de la chaîne n'est pas significative). Voici un exemple :
SELECT has_table_privilege('mon_schema.ma_table', 'select');
has_database_privilege vérifie si l'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 évalué à CREATE, TEMPORARY ou TEMP (ce 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. En spécifiant une fonction par une chaîne texte plutôt que par son OID, l'entrée autorisée est identique au type de données regprocedure (voir la Section 8.12, « Types identifiants d'objets »). Le type de droit d'accès désiré doit s'évaluer à EXECUTE. Voici un exemple :
SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
has_language_privilege vérifie si un utilisateur peut accéder à un langage de procédures 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 s'évaluer à USAGE.
pg_has_role vérifie si un utilisateur peut accéder à un rôle d'une façon particulière. Les possibilités pour ses arguments sont analogues à has_table_privilege. Le type du droit d'accès désiré doit s'évaluer à MEMBER ou USAGE. MEMBER dénote une appartenance directe ou indirecte dans le rôle (c'est-à-dire le droit de faire SET ROLE) alors que USAGE dénote le fait que les droits du rôle sont immédiatement disponibles sans exécuter SET ROLE.
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 droit d'accès désiré doit s'évaluer à CREATE ou USAGE.
has_tablespace_privilege vérifie si un utilisateur peut accéder à un tablespace 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 s'évaluer à CREATE.
Pour tester si un utilisateur détient une option grant sur le droit, ajoutez WITH GRANT OPTION au mot clé du droit ; par exemple 'UPDATE WITH GRANT OPTION'.
Le Tableau 9.41, « Fonctions de requêtes sur la visibilité dans les schémas » affiche les fonctions qui déterminent si un certain objet est visible dans le chemin de recherche en cours. Une table est dite visible si son schéma contenant est dans le chemin de recherche et qu'aucune table du même nom apparaît avant dans le chemin de recherche. Ceci est équivalent à au fait que la table peut être référencée par 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.41. Fonctions de requêtes sur la visibilité dans les schémas
Nom | Type de retour | Description |
---|---|---|
pg_table_is_visible(table_oid) | boolean | la table est-elle 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 |
pg_function_is_visible (function_oid) | boolean | la fonction 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_opclass_is_visible (opclass_oid) | boolean | la classe d'opérateur 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_table_is_visible réalise la vérification pour les tables (ou vues, ou tout autre type d'entrée dans pg_class). pg_type_is_visible, pg_function_is_visible, pg_operator_is_visible, pg_opclass_is_visible et pg_conversion_is_visible réalisent le même type de vérification de visibilité pour les types (et domaines), les fonctions, les opérateurs, les classes d'opérateur et les conversions, respectivement. Pour les fonctions et opérateurs, un objet dans le chemin de recherche est visible s'il n'y a aucun objet du même nom et du même type de données pour les arguments précédemment dans le chemin. Pour les classes d'opérateur, les méthodes d'accès par le nom et par l'index associé sont considérées.
Toutes ces fonctions nécessitent que les OID des objets identifient l'objet à vérifier. Si vous voulez 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);
Notez qu'il n'y aurait aucun sens à tester un nom non qualifié de cette façon -- si le nom peut être reconnu, il doit être visible.
Le Tableau 9.42, « Fonctions d'information sur le catalogue système » liste les fonctions qui extraient des informations à partir des catalogues système.
Tableau 9.42. Fonctions d'information sur le catalogue système
Nom | Type de retour | Description |
---|---|---|
format_type (type_oid, typemod) | text | obtient le nom SQL d'un type de données |
pg_get_constraintdef(constraint_oid) | text | obtient la définition d'une contrainte |
pg_get_constraintdef(constraint_oid, pretty_bool) | text | obtient la définition d'une contrainte |
pg_get_expr(expr_text, relation_oid) | text | décompile la forme interne d'une expression, supposant que toute Vars fait référence à la relation indiquée par le deuxième paramètre |
pg_get_expr(expr_text, relation_oid, pretty_bool) | text | décompile la forme interne d'une expression, supposant que toute Vars fait référence à la relation indiquée par le deuxième paramètre |
pg_get_indexdef (index_oid) | text | récupère la commande CREATE INDEX pour l'index |
pg_get_indexdef (index_oid, column_no, pretty_bool) | text | récupère la commande CREATE INDEX pour l'index, ou une définition d'une seule colonne de l'index quand column_no est différent de zéro |
pg_get_ruledef(rule_oid) | text | obtient la commande CREATE RULE pour une règle |
pg_get_ruledef(rule_oid, pretty_bool) | text | obtient la commande CREATE RULE pour une règle |
pg_get_serial_sequence(table_name, column_name) | text | obtient le nom d'une séquence qui possède une colonne serial ou bigserial |
pg_tablespace_databases(tablespace_oid) | setof oid | obtient l'ensemble des OID des bases qui ont des objets dans un tablespace précis |
pg_get_triggerdef(trigger_oid) | text | obtient la commande CREATE [ CONSTRAINT ] TRIGGER pour un déclencheur |
pg_get_userbyid(roleid) | name | récupère le nom du rôle suivant l'ID donné |
pg_get_viewdef(view_name) | text | obtient la commande SELECT sous-jacente pour la vue (obsolète) |
pg_get_viewdef(view_name, pretty_bool) | text | obtient la commande SELECT sous-jacente pour la vue (obsolète) |
pg_get_viewdef(view_oid) | text | obtient la commande SELECT sous-jacente pour la vue |
pg_get_viewdef(view_oid, pretty_bool) | text | obtient la commande SELECT sous-jacente pour la vue |
format_type renvoie le nom SQL d'un type de données qui est identifié par son OID de type et peut-être par un modificateur de type. Passez NULL au modificateur de type si aucun modificateur spécifique n'est connu.
pg_get_constraintdef, pg_get_indexdef, pg_get_ruledef, and pg_get_triggerdef, respectively reconstruct the creating command for a constraint, index, rule, or trigger. (Note that this is a decompiled reconstruction, not the original text of the command.) pg_get_expr decompiles the internal form of an individual expression, such as the default value for a column. It may be useful when examining the contents of system catalogs. pg_get_viewdef reconstructs the SELECT query that defines a view. Most of these functions come in two variants, one of which can optionally « pretty-print » the result. The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of PostgreSQL™; avoid using pretty-printed output for dump purposes. Passing false for the pretty-print parameter yields the same result as the variant that does not have the parameter at all.
pg_get_userbyid extrait un nom de rôle suivant l'OID indiqué.
pg_get_serial_sequence récupère le nom de la séquence associée avec une colonne de type serial ou bigserial. Le nom est convenablement formaté pour être renvoyer aux fonctions de séquence (voir la Section 9.12, « Fonctions de manipulation de séquence »). NULL est renvoyé si la colonne n'a pas de séquence associée.
pg_tablespace_databases autorise l'examen d'un espace logique. Elle renvoie l'ensemble des OID des bases de données ayant des objets stockés dans le tablespace. Si cette fonction renvoie des lignes, le tablespace n'est pas vide et ne peut donc pas être supprimé. Pour afficher les objets spécifiques peuplant le tablespace, vous aurez besoin de vous connecter aux bases de données identifiées par pg_tablespace_databases et de demander leurs catalogues pg_class.
pg_get_userbyid extrait un nom de rôle suivant son OID.
Les fonctions affichées dans le Tableau 9.43, « Fonctions d'informations sur les commentaires » extraient des commentaires stockés précédemment avec la commande COMMENT. Une valeur NULL est renvoyée si aucun commentaire ne correspond aux paramètres spécifiés.
Tableau 9.43. Fonctions d'informations sur les commentaires
Nom | Type de retour | Description |
---|---|---|
obj_description (object_oid, catalog_name) | text | récupère un commentaire à partir d'un objet de la base de données |
obj_description(object_oid) | text | récupère un commentaire à partir d'un objet de la base de données (obsolète) |
col_description (table_oid, column_number) | text | récupère un commentaire sur une colonne d'une table |
La forme à deux paramètres de obj_description renvoie le commentaire d'un objet de la base de données, spécifié par son OID et le nom du catalogue système le contenant. Par exemple, obj_description(123456,'pg_class') récupérerait le commentaire pour une table d'OID 123456. La forme à un paramètre de obj_description requiert seulement 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 ; du coup, un mauvais commentaire pourrait être renvoyé.
col_description renvoie un commentaire pour une colonne de la table, spécifié par l'OID de la table et le numéro de la colonne. obj_description ne peut pas être utilisé pour les colonnes de table car les colonnes ne disposent d'OID.