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

9.27. Fonctions d'administration systĂšme

Les fonctions décrites dans cette section sont utilisées pour contrÎler et superviser une installation PostgreSQL.

9.27.1. Fonctions de configuration

Tableau 9.87 liste les fonctions disponibles pour requĂȘter et modifier les paramĂštres de configuration.

Tableau 9.87. Fonctions de configuration

Fonction

Description

Exemple(s)

current_setting ( setting_name text [, missing_ok boolean ] ) → text

Renvoie la valeur actuelle du paramÚtre setting_name. Si ce paramÚtre n'existe pas, current_setting renvoie une erreur sauf si missing_ok est renseigné et vaut true (auquel cas NULL est renvoyé). Cette fonction correspond à la commande SQL SHOW.

current_setting('datestyle') → ISO, MDY

set_config ( setting_name text, new_value text, is_local boolean ) → text

Configure le paramĂštre setting_name Ă  new_value, et renvoie cette valeur. Si is_local vaut true, la nouvelle valeur s'appliquera uniquement durant la transaction en cours. Si vous voulez que la nouvelle valeur s'applique pour le reste de la session courante, utilisez false Ă  la place. Cette fonction correspond Ă  la commande SQL SET.

set_config('log_statement_stats', 'off', false) → off


9.27.2. Fonctions d'envoi de signaux

Les fonctions listĂ©es dans Tableau 9.88 envoient des signaux de contrĂŽle aux autres processus serveur. L'utilisation de ces fonctions est restreinte aux superutilisateurs par dĂ©faut, mais un accĂšs peut ĂȘtre fourni aux utilisateurs en utilisant la commande GRANT, avec quelques exceptions notables.

Chacune de ces fonctions renvoient true si le signal a bien été envoyé et false si l'envoi du signal a échoué.

Tableau 9.88. Fonctions d'envoi de signaux

Fonction

Description

pg_cancel_backend ( pid integer ) → boolean

Annule la requĂȘte en cours de la session du processus serveur dont l'identifiant de processus a Ă©tĂ© donnĂ©. Ceci est aussi autorisĂ© si le rĂŽle appelant est un membre de pg_signal_backend. NĂ©anmoins, seuls les superutilisateurs peuvent annuler les processus des superutilisateurs.

pg_log_backend_memory_contexts ( pid integer ) → boolean

Demande le traçage des contextes mĂ©moire du processus dont l'identifiant est spĂ©cifiĂ©. Cette fonction doit envoyer la demande aux processus serveur sauf le logger. Ces contextes mĂ©moire seront tracĂ©s au niveau LOG. Ils apparaĂźtront dans les traces du serveur selon la configuration (voir Section 20.8 pour plus d'informations), mais ne seront pas envoyĂ©s au client, comme indiquĂ© dans client_min_messages. Seul un superutilisateur peut demander le traçage des contextes mĂ©moire.

pg_reload_conf () → boolean

Cause le rechargement des fichiers de configurations par tous les processus du serveur PostgreSQL. (Ceci se fait en envoyant un signal SIGHUP au processus postmaster qui, à son tour, envoie un signal SIGHUP à chacun de ses processus fils.) Vous pouvez utiliser les vues pg_file_settings et pg_hba_file_rules pg_ident_file_mappings pour vérifier d'éventuelles erreurs dans les fichiers de configuration, avant leur rechargement.

pg_rotate_logfile () → boolean

Signale au collecteur de traces qu'il doit changer de fichier de trace immédiatement. Ceci fonctionne seulement quand le collecteur de trace natif est en cours d'exécution.

pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) → boolean

Termine la session pour le processus serveur dont l'identifiant de processus a Ă©tĂ© donnĂ©. Ceci est aussi autorisĂ© si le rĂŽle appelant est un membre du rĂŽle dont le processus est en cours d'arrĂȘt ou si le rĂŽle appelant est membre de pg_signal_backend. NĂ©anmoins, seuls les superutilisateurs peuvent terminer les processus des superutilisateurs.

Si timeout n'est pas précisé ou vaut zéro, cette fonction renvoie true, que le processus actuel se termine ou pas, confirmant simplement l'envoi correct du signal. Si timeout est précisé (en millisecondes) et que sa valeur est supérieure à zéro, la fonction attend que le processus se termine effectivement ou que le temps soit dépassé. Si le processus est terminé, la fonction retourne true. Si le temps est dépassé, un avertissement est émis et la fonction retourne false.


pg_cancel_backend et pg_terminate_backend envoient des signaux (respectivement SIGINT et SIGTERM) aux processus serveurs identifiés par leur PID. Le PID d'un processus serveur actif est disponible dans la colonne pid de la vue pg_stat_activity ou en listant les processus postgres sur le serveur (en utilisant ps sur Unix ou le Task Manager sur Windows). Le rÎle d'un processus serveur actif est disponible dans la colonne usename de la vue pg_stat_activity.

pg_log_backend_memory_contexts peut ĂȘtre utilisĂ©e pour tracer les contextes mĂ©moires de processus en arriĂšre-plan. Par exemple :

postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid());
 pg_log_backend_memory_contexts
--------------------------------
 t
(1 row)

Un message pour chaque contexte mĂ©moire sera tracĂ©. Par exemple :

LOG:  logging memory contexts of PID 10377
STATEMENT:  SELECT pg_log_backend_memory_contexts(pg_backend_pid());
LOG:  level: 0; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used
LOG:  level: 1; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used
LOG:  level: 1; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used
LOG:  level: 1; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used
LOG:  level: 1; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used
LOG:  level: 1; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used
LOG:  level: 1; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used
LOG:  level: 1; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used
...
LOG:  level: 1; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used
LOG:  Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used

S'il y a plus de 100 contextes fils sous le mĂȘme parent, les 100 premiers contextes fils sont tracĂ©s, le reste des contextes Ă©tant rĂ©sumĂ©. Notez que des appels frĂ©quents Ă  cette fonction peut produire une surchage significative, parce qu'elle gĂ©nĂšre un grand nombre de messages dans les traces.

9.27.3. Fonctions de contrĂŽle de la sauvegarde

Les fonctions listĂ©es dans Tableau 9.89 aident Ă  la rĂ©alisation de sauvegardes en ligne. Ces fonctions ne peuvent pas ĂȘtre exĂ©cutĂ©es lors de la restauration (sauf pour pg_backup_start, pg_backup_stop, pg_wal_lsn_diff).

Pour les dĂ©tails sur l'utilisation correcte de ces fonctions, voir Section 26.3.

Tableau 9.89. Fonctions de contrĂŽle de la sauvegarde

Fonction

Description

pg_create_restore_point ( name text ) → pg_lsn

CrĂ©e un enregistrement marqueur nommĂ© dans le journal de transactions. Ce marqueur peut ensuite ĂȘtre utilisĂ© comme cible de restauration et renvoie l'emplacement correspondant dans le journal de transactions. Le nom donnĂ© peut ĂȘtre utilisĂ© avec recovery_target_name pour indiquer le point final de restauration. Évitez de crĂ©er plusieurs points de restauration de mĂȘme nom car la restauration s'arrĂȘtera au premier marqueur rencontrĂ© dont le nom correspond Ă  la cible de restauration.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_current_wal_flush_lsn () → pg_lsn

Renvoie l'emplacement actuel de vidage du journal de transaction (voir les notes ci-dessous).

pg_current_wal_insert_lsn () → pg_lsn

Renvoie l'emplacement actuel d'insertion du journal de transaction (voir les notes ci-dessous).

pg_current_wal_lsn () → pg_lsn

Renvoie l'emplacement actuel d'écriture du journal de transaction (voir les notes ci-dessous).

pg_backup_start ( label text [, fast boolean ] ) → pg_lsn

PrĂ©pare le serveur Ă  commencer une sauvegarde en ligne. Le seul paramĂštre requis est un label arbitraire dĂ©fini par l'utilisateur. (Typiquement, ce serait nom sous lequel le fichier de sauvegarde sera stockĂ©.) Si le deuxiĂšme paramĂštre optionnel est donnĂ© Ă  true, il demande l'exĂ©cution aussi rapide que possible de pg_backup_start. Ceci force un checkpoint immĂ©diat ce qui va cause un pic dans les opĂ©rations disques, ralentissant les requĂȘtes en cours d'exĂ©cution.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_backup_stop ( [wait_for_archive boolean ] ) → record ( lsn pg_lsn, labelfile text, spcmapfile text )

Termine l'exĂ©cution d'une sauvegarde en ligne. Le contenu dĂ©sirĂ© du fichier de label et du fichier de correspondance des tablespaces est renvoyĂ© comme rĂ©sultat de la fonction, et doit ĂȘtre Ă©crit dans des fichiers dans l'aire de sauvegarde. Ces fichiers ne doivent pas ĂȘtre Ă©crits dans le rĂ©pertoire actuel des donnĂ©es (le faire pour causer l'Ă©chec de redĂ©marrage de PostgreSQL dans le cas d'un crash).

Il existe un paramĂštre optionnel de type boolean. À false, la fonction se terminera immĂ©diatement aprĂšs la fin de sauvegarde, sans attendre l'archivage des journaux de transactions. Ce comportement est seulement utile pour les logiciels de sauvegarde qui surveillent indĂ©pendamment l'archivage des journaux de transactions. Sinon, les journaux requis pour rendre la sauvegarde cohĂ©rente pourraient manquer et rendre la sauvegarde inutilisable. Par dĂ©faut ou quand ce paramĂštre vaut true, pg_backup_stop attendra l'archivage des journaux de transactions si l'archivage est activĂ©. (Sur un serveur secondaire, cela signifie qu'elle attendra que si archive_mode est configurĂ© Ă  always. Si l'activitĂ© en Ă©criture est faible sur le serveur primaire, il pourrait ĂȘtre utile d'exĂ©cuter un pg_switch_wal sur le serveur primaire pour forcer un changement de journal.)

Lors d'une exécution sur un serveur primaire, cette option crée aussi un fichier d'historique de sauvegarde dans la zone d'archivage des journaux de transactions. Le fichier d'historique inclut un label donné par pg_backup_start, les emplacements de début et de fin de la sauvegarde, et les dates et heures de début et de fin de la sauvegarde. AprÚs l'enregistrement de l'emplacement de fin, le point d'insertion actuel dans les journaux de transactions est automatiquement avancé au prochain journal, pour que le journal de fin de sauvegarde soit immédiatement archivé pour terminer la sauvegarde.

Le rĂ©sultat de la fonction est un simple enregistrement. La colonne lsn dĂ©tient l'emplacement de la fin de la sauvegarde dans les journaux de transactions (qui peut de nouveau ĂȘtre ignorĂ©). La deuxiĂšme colonne renvoie le contenu du fichier de label, et la troisiĂšme colonne le contenu du fichier de correspondance des tablespaces. Elles doivent ĂȘtre enregistrĂ©es comme faisant partie de la sauvegarde et sont requises pour le traitement de la restauration.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_switch_wal () → pg_lsn

Force le serveur Ă  utiliser un nouveau journal de transactions, ce qui permet au journal actuel d'ĂȘtre archivĂ© (en supposant que vous utilisez l'archivage continu). Le rĂ©sultat est l'emplacement de fin du journal plus 1 dans le journal tout juste terminĂ©. S'il n'y a pas eu d'activitĂ© d'Ă©criture depuis le dernier changement de journal, pg_switch_wal ne fait rien et renvoie l'emplacement de dĂ©but du journal actuellement utilisĂ©.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_walfile_name ( lsn pg_lsn ) → text

Convertit un emplacement d'un journal de transaction par le nom du fichier du journal de transaction détenant cet emplacement.

pg_walfile_name_offset ( lsn pg_lsn ) → record ( file_name text, file_offset integer )

Convertit un emplacement d'un journal de transaction par le nom du fichier du journal de transaction détenant cet emplacement et le décalage en octets pour aller sur cet emplacement.

pg_wal_lsn_diff ( lsn1 pg_lsn, lsn pg_lsn2 ) → numeric

Calcule la diffĂ©rence en octets (lsn1 - lsn2) entre deux emplacements dans les journaux de transactions. Cette fonction peut ĂȘtre utilisĂ©e avec pg_stat_replication ou certaines des fonctions listĂ©es dans Tableau 9.89 pour obtenir le retard de rĂ©plication.


pg_current_wal_lsn affiche l'emplacement actuel d'Ă©criture dans le journal de transaction en cours, dans le mĂȘme format que celui utilisĂ© par les fonctions ci-dessus. De mĂȘme, pg_current_wal_insert_lsn affiche l'emplacement d'insertion actuel et pg_current_wal_flush_lsn affiche l'emplacement de vidage actuel. L'emplacement d'insertion est la fin « logiqie Â» du journal de transaction Ă  n'importe quel moment, alors que l'emplacement d'Ă©criture est la fin de ce qui a Ă©tĂ© rĂ©ellement Ă©crit Ă  partir des caches internes du serveur, et l'emplacement de vidage est le dernier emplacement connu pour avoir Ă©tĂ© rĂ©ellement Ă©crit sur disque. L'emplacement d'Ă©criture est la fin de ce qui doit ĂȘtre examinĂ© en dehors du serveur et est habituellement ce que vous voulez si vous ĂȘtes intĂ©ressĂ© par l'archivage des journaux partiellement complets. Les emplacements d'insertion et de vidage sont rendus disponibles principalement dans un but de dĂ©bogage. Ce sont des opĂ©rations de lecture seule et ne nĂ©cessite pas l'attribut superutilisateur.

Vous pouvez utiliser pg_walfile_name_offset pour extrait le nom du fichier et le dĂ©calage en octet du journal de transaction correspondant Ă  partir d'une valeur pg_lsn. Par exemple :

postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn);
        file_name         | file_offset
--------------------------+-------------
 00000001000000000000000D |     4039624
(1 row)
 

De la mĂȘme façon, pg_walfile_name extrait juste le nom du fichier du journal de transactions. Quand l'emplacement donnĂ© est exactement Ă  la limite du fichier, ces deux fonctions renvoient le nom du journal prĂ©cĂ©dent. Ceci est gĂ©nĂ©ralement le comportement souhaitĂ© pour gĂ©rer l'archivage car le fichier prĂ©cĂ©dent est le dernier qui doit ĂȘtre archivĂ©.

9.27.4. Fonctions de contrĂŽle de la restauration

Les fonctions listĂ©es dans Tableau 9.90 fournissent des informations sur le statut actuel d'un serveur secondaire. Ces fonctions peuvent ĂȘtre exĂ©cutĂ©es pendant une restauration et pendant une exĂ©cution normale.

Tableau 9.90. Fonctions d'information sur la restauration

Fonction

Description

pg_is_in_recovery () → boolean

Renvoie true si la restauration est toujours en cours.

pg_last_wal_receive_lsn () → pg_lsn

Renvoie le dernier emplacement des journaux de transactions, reçu et synchronisé sur disque par la réplication en flux. Tant que la réplication en flux est en cours, ceci augmentera de façon monotique. Si la restauration s'est terminée, alors cela restera statique à l'emplacement du dernier enregistrement reçu et synchronisé sur disque lors de la restauration. Si la réplication en flux est désactivée ou qu'elle n'a pas commencé, la fonction renvoie NULL.

pg_last_wal_replay_lsn () → pg_lsn

Renvoie le dernier emplacement des journaux de transactions, rejoué lors de la restauration. Si la restauration est toujours en cours, ceci augmentera de façon monotique. Si la restauration s'est terminée, alors cela restera statique à l'emplacement du dernier enregistrement appliqué lors de la restauration. Quand le serveur a été démarré normalement sans restauration, la fonction renvoie NULL.

pg_last_xact_replay_timestamp () → timestamp with time zone

Renvoie l'horodatage de la derniĂšre transaction rejouĂ©e pendant la restauration. C'est le moment oĂč l'enregistrement de validation ou d'annulation a Ă©tĂ© gĂ©nĂ©rĂ© sur le serveur promaire. Si aucune transaction n'a Ă©tĂ© rejouĂ©e pendant la restauration, la fonction renvoie NULL. Sinon, si la restauration est toujours en cours, ceci augmentera de façon monotonique. Si la restauration s'est terminĂ©e, alors cela restera statique Ă  partir du moment de la derniĂšre transaction appliquĂ©e Ă  la restauration. Quand le serveur est dĂ©marrĂ© normalement sans restauration, la fonction renvoie NULL.

pg_get_wal_resource_managers () → setof record ( rm_id integer, rm_name text, rm_builtin boolean )

Renvoie les gestionnaires de ressource WAL actuellement chargés dans le systÚme. La colonne rm_builtin indique s'il s'agit d'un gestionnaire de ressources interne ou d'un gestionnaire de ressources personnalisé chargé par une extension.


Les fonctions listĂ©es dans Tableau 9.91 contrĂŽlent la progression de la restauration. Ces fonctions peuvent seulement ĂȘtre exĂ©cutĂ©es lors d'une restauration.

Tableau 9.91. Fonctions de contrĂŽle de la restauration

Fonction

Description

pg_is_wal_replay_paused () → boolean

Renvoie true si la pause de la restauration est demandée.

pg_get_wal_replay_pause_state () → text

Renvoie l'état de la pause de restauration. Les valeurs retournées sont not paused si aucune pause n'est requise, pause requested si une pause est requise, mais que la restauration n'est pas en pause, et paused si la restauration est effectivement en pause.

pg_promote ( wait boolean DEFAULT true, wait_seconds integer DEFAULT 60 ) → boolean

Promeut un serveur secondaire au statut primaire. Avec wait configuré à true (la valeur par défaut), la fonction attend jusqu'à ce que la promotion soit terminée ou jusqu'à ce que wait_seconds se soient écoulées, et renvoie true si la promotion a réussi. Elle renvoie false dans les autres cas. Si wait est configuré à false, la fonction renvoie true immédiatement aprÚs avoir envoyé le signal SIGUSR1 au postmaster pour déclencher sa promotion.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_wal_replay_pause () → void

Demande la mise en pause de la restauration. Une demande ne signifie pas que la restauration va effectivement s'arrĂȘter. Si vous voulez vĂ©rifier que la restauration s'est effectivement arrĂȘtĂ©e, vous devez vĂ©rifier l'Ă©tat de la pause de restauration retournĂ©e par pg_get_wal_replay_pause_state(). Notez que pg_is_wal_replay_paused() retourne si oui ou non une demande est faite. Pendant que la restauration est en pause, plus aucune modification ne peut ĂȘtre faite sur la base de donnĂ©es. Si aucun hot standby n'est actif, toutes les requĂȘtes verront le mĂȘme instantanĂ© consistant de la base de donnĂ©es, et plus aucun conflit de requĂȘte ne sera gĂ©nĂ©rĂ© jusqu'Ă  ce que la restauration redĂ©marre.

Cette fonction est par défaut restreinte aux superutilisateurs, mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.

pg_wal_replay_resume () → void

Relance la restauration si elle était en pause.

Cette fonction est par défaut restreinte aux superutilisateurs mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter cette fonction.


pg_wal_replay_pause et pg_wal_replay_resume ne peuvent pas ĂȘtre exĂ©cutĂ©s quand une promotion est en cours. Si une promotion est dĂ©clenchĂ©e alors que la restauration est en pause, l'Ă©tat de pause se termine et la promotion continue.

Si la rĂ©plication en flux est dĂ©sactivĂ©, l'Ă©tat de pause peut continuer indĂ©finiment sans problĂšme. Si la rĂ©plication en flux est en cours, alors les enregistrements des journaux de transactions continuent Ă  ĂȘtre rçus, ce qui finira par remplir l'espace disque disponible, suivant la durĂ©e de la pause, le taux de gĂ©nĂ©ration des journaux de transactions et l'espace disque disponible.

9.27.5. Fonctions de synchronisation d'image

PostgreSQL permet aux sessions des bases de données de synchroniser leur image de base. Une image de base (ou snapshot) détermine les données visibles pour la transaction utilisant l'image. Les images synchronisées sont nécessaires quand deux sessions ou plus ont besoin de voir un contenu identique de la base de données. Si deux sessions démarrent leur transaction indépendamment, il existe toujours une possibilité qu'une autre transaction valid entre l'exécution des deux commandes START TRANSACTION, de telle façon qu'une session voit l'effet de cette transaction alors que l'autre ne la voit pas.

Pour rĂ©soudre ce problĂšme, PostgreSQL autorise une transaction Ă  exporter l'image qu'elle utilise. Tant que la transaction exportĂ©e reste ouverte, les autres transactions peuvent importer son image et, de ce fait, garantir qu'elles partagent exactement la mĂȘme vue de la base que la premiĂšre transaction. Mais notez que tout changement effectuĂ© par une de ces transactions reste invisible aux autres transactions, comme d'habitude pour les modifications rĂ©alisĂ©es par des transactions non validĂ©es. Donc les transactions sont synchronisĂ©es suivant les donnĂ©es prĂ©-existantes, mais agissent normalement pour les modifications qu'elles rĂ©alisent.

Les images sont exportĂ©es avec la fonction pg_export_snapshot, affichĂ©e dans Tableau 9.92, et importĂ©es avec la commande SET TRANSACTION.

Tableau 9.92. Fonctions de synchronisation d'image

Fonction

Description

pg_export_snapshot () → text

Sauvegarde l'image actuelle de la transaction et renvoie une donnĂ©e de type text identifiant l'image. Cette chaĂźne doit ĂȘtre fournie (en dehors de la base) aux clients qui veulent importer l'image. L'image est disponible Ă  l'import seulement jusqu'Ă  la fin de la transaction qui l'a exportĂ©.

Une transaction peut exporter plus d'une image, si nĂ©cessaire. Notez que faire cela n'est utile que pour les transactions en niveau READ COMMITTED car, dans les niveaux d'isolation REPEATABLE READ et supĂ©rieurs, les transactions utilisent la mĂȘme image tout au long de leur vie. Une fois qu'une transaction a export une image, elle ne peut pas ĂȘtre prĂ©parĂ©e avec PREPARE TRANSACTION.


9.27.6. Fonctions de gestion de la rĂ©plication

Les fonctions listĂ©es dans Tableau 9.93 sont pour le contrĂŽle et l'interaction avec les fonctionnalitĂ©s de rĂ©plication. Voir Section 27.2.5, Section 27.2.6 et Chapitre 50 pour des informations sur les fonctionnalitĂ©s sous-jacentes. L'utilisation de fonctions pour l'origine de rĂ©plication est seulement autorisĂ©e aux superutilisateurs par dĂ©faut, mais peut ĂȘtre autorisĂ©e aux autres utilisateurs en utilisant la commande GRANT. L'utilisation des fonctions pour les slots de rĂ©plication est restreinte aux superutilisateurs et aux utilisateurs ayant l'attribut REPLICATION.

La plupart de ces fonctions ont des commandes Ă©quivalentes dans le protocole de rĂ©plication ; voir Section 55.4.

Les fonctions dĂ©crites dans Section 9.27.3, Section 9.27.4 et Section 9.27.5 sont aussi adĂ©quates pour la rĂ©plication.

Tableau 9.93. Fonctions de gestion de la rĂ©plication

Fonction

Description

pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean, temporary boolean, twophase boolean ] ) → record ( slot_name name, lsn pg_lsn )

CrĂ©e un nouveau slot de rĂ©plication physique nommĂ© slot_name. Le deuxiĂšme paramĂštre, optionnel, indique, quand il vaut true, que le LSN pour ce slot de rĂ©plication doit ĂȘtre rĂ©servĂ© immĂ©diatement. Dans le cas contraire, le LSN est rĂ©servĂ© lors de la premiĂšre connexion Ă  partir d'un client de rĂ©plication de flux. Les changements en flux d'un slot de rĂ©plication sont seulement possible avec le protocole de rĂ©plication de flux -- voir Section 55.4. Le troisiĂšme argument, optionnel, nommĂ© temporary, indique, quand il vaut true, que le slot ne doit pas ĂȘtre enregistrĂ© de façon permanente sur disque et qu'il a seulement pour but d'ĂȘtre utilisĂ© dans la session en cours. Les slots temporaires sont aussi supprimĂ©s dĂšs qu'une erreur survient. Le quatriĂšme paramĂštre optionnel, twophase, quand il vaut true, indique que le dĂ©codage des transactions prĂ©parĂ©es est autorisĂ© pour ce slot. Cette fonction correspond Ă  la commande CREATE_REPLICATION_SLOT ... PHYSICAL du protocole de rĂ©plication.

pg_drop_replication_slot ( slot_name name ) → void

Supprime le slot de réplication physique ou logique nommé slot_name. Elle est identique à la commande DROP_REPLICATION_SLOT du protocole de réplication.

pg_create_logical_replication_slot ( slot_name name, plugin name [, temporary boolean, twophase boolean ] ) → record ( slot_name name, lsn pg_lsn )

CrĂ©e un nouveau slot de rĂ©plication logique (dĂ©codage) nommĂ© slot_name en utilisant le plugin de sortie plugin. Le troisiĂšme paramĂštre, optionnel, nommĂ© temporary indique, quand il vaut true, que le slot ne devrait pas ĂȘtre stockĂ©e de façon permanente sur disque et a seulement pour but d'ĂȘtre utilisĂ© par la session en cours. Les slots temporaires sont aussi supprimĂ©s en cas d'erreur. Un appel Ă  cette fonction a le mĂȘme effet que la commande CREATE_REPLICATION_SLOT ... LOGICAL du protocole de rĂ©plication.

pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

Copie un slot de rĂ©plication physique existant, nommĂ© src_slot_name, en un slot de rĂ©plication physique nommĂ© dst_slot_name. Le slot physique copiĂ© commencera Ă  rĂ©server les journaux de transactions Ă  partir du mĂȘme LSN que celui du slot copiĂ©. Le paramĂštre temporary est en option. Si temporary est omis, la valeur du slot source est utilisĂ©e.

pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean [, plugin name ]] ) → record ( slot_name name, lsn pg_lsn )

Copie un slot existant de rĂ©plication logique nommĂ© named src_slot_name en un slot de rĂ©plication logique nommĂ© dst_slot_name, en changeant en option son plugin de sortie et sa persistence. Le slot logique copiĂ© commence Ă  partir du mĂȘme LSN que celui du slot logique source. Les paramĂštres temporary et plugin sont optionnels ; s'ils sont omis, leur valeur sur le slot source est utilisĂ©e.

pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

Renvoie les changements dans le slot slot_name, en commençant Ă  partir du point oĂč les changements ont Ă©tĂ© consommĂ©s en dernier. Si upto_lsn et upto_nchanges sont NULL, le dĂ©codage logique continuera jusqu'Ă  la fin des journaux de transactions. Si upto_lsn n'est pas NULL, le dĂ©codage incluera seulement les transactions dont la validation date d'avant le LSN indiquĂ©. Si upto_nchanges n'est pas NULL, le dĂ©codage stoppera quand le nombre de lignes produites par le dĂ©codage dĂ©passe la valeur indiquĂ©e. Cependant, notez que le nombre rĂ©el de lignes renvoyĂ©es pourrait ĂȘtre plus important car cette limite est seulement vĂ©rifiĂ©e aprĂšs l'ajout des lignes produites lors du dĂ©codage de chaque nouvelle validation de transaction.

pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

Se comporte comme la fonction pg_logical_slot_get_changes(), sauf que les changements ne sont pas consommĂ©s ; autrement dit, ils sont de nouveau renvoyĂ©s lors des prochains appels.

pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

Se comporte comme la fonction pg_logical_slot_get_changes(), sauf que les changements sont renvoyés comme des bytea.

pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

Se comporte comme la fonction pg_logical_slot_peek_changes(), sauf que les modifications sont renvoyées sous la forme de bytea.

pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) → record ( slot_name name, end_lsn pg_lsn )

Avance la position confirmĂ©e actuelle pour le slot de rĂ©plication nommĂ© slot_name. Le slot ne sera pas dĂ©placĂ© en arriĂšre, et il ne sera pas dĂ©placĂ© aprĂšs l'emplacement d'insertion actuel. Renvoie le nom du slot et la position oĂč il a Ă©tĂ© rĂ©ellement avancĂ©. L'information mise Ă  jour de position du slot est Ă©crite dans le prochain checkpoint si l'avance a Ă©tĂ© possible. Dans le cas d'un crash, le slot pourrait retourner Ă  une position prĂ©cĂ©dente.

pg_replication_origin_create ( node_name text ) → oid

Crée une origine de réplication avec le nom externe donné, et renvoie l'identifiant interne qui lui a été affecté.

pg_replication_origin_drop ( node_name text ) → void

Supprime une origine de réplication précédemment créée, incluant toute progression de rejeu associée.

pg_replication_origin_oid ( node_name text ) → oid

Recherche une origine de réplication par son nom et renvoie son identifiant interne. Si cette origine de réplication n'existe pas, NULL est renvoyée.

pg_replication_origin_session_setup ( node_name text ) → void

Marque la session en cours comme rejouant Ă  partir de l'origine donnĂ©e, en autorisant le traçage de la progression du rejeu. Peut seulement ĂȘtre utilisĂ©e si aucune origine n'est actuellement sĂ©lectionnĂ©e. Utilisez pg_replication_origin_session_reset pour annuler.

pg_replication_origin_session_reset () → void

Annule les effets de pg_replication_origin_session_setup().

pg_replication_origin_session_is_setup () → boolean

Renvoie true si une origine de réplication a été sélectionnée dans la session en cours.

pg_replication_origin_session_progress ( flush boolean ) → pg_lsn

Renvoie l'emplacement de rejeu pour l'origine de rĂ©plication sĂ©lectionnĂ©e dans la session en cours. Le paramĂštre flush dĂ©termine si la transaction locale correspondance sera garantie d'ĂȘtre vidĂ©e sur disque ou pas.

pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) → void

Marque la transaction en cours comme rejouant une transaction qui a Ă©tĂ© validĂ©e au LSN et Ă  l'horodatage donnĂ©s. Peut ĂȘtre appelĂ© quand une origine de rĂ©plication a Ă©tĂ© sĂ©lectionnĂ©e en utilisant pg_replication_origin_session_setup.

pg_replication_origin_xact_reset () → void

Annule les effets de pg_replication_origin_xact_setup().

pg_replication_origin_advance ( node_name text, lsn pg_lsn ) → void

Configure la progression de la rĂ©plication pour le nƓud donnĂ© Ă  l'emplacement donnĂ©. Ceci est principalement utile pour configurer l'emplacement initial ou pour configurer un nouvel emplacement aprĂšs des changements de configuration ou similaires. Faites attention qu'une mauvaise utilisation de cette fonction peut amener Ă  des donnĂ©es rĂ©pliquĂ©es de façon incohĂ©rente.

pg_replication_origin_progress ( node_name text, flush boolean ) → pg_lsn

Renvoie l'emplacement de rejeu pour l'origine de rĂ©plication donnĂ©e. Le paramĂštre flush dĂ©termine si la transaction locale correspondante sera garantie d'ĂȘtre vidĂ©e sur disque ou pas.

pg_logical_emit_message ( transactional boolean, prefix text, content text ) → pg_lsn

pg_logical_emit_message ( transactional boolean, prefix text, content bytea ) → pg_lsn

Émet un message de dĂ©codage logique. Cela peut ĂȘtre utilisĂ© pour passer des messages gĂ©nĂ©riques aux plugins de dĂ©codage logique via les journaux de transactions. Le paramĂštre transactional indique si le message devrait faire partie de la transaction en cours ou s'il devrait ĂȘtre Ă©crit immĂ©diatement et dĂ©codĂ© dĂšs que le dĂ©codeur logique lit l'enregistrement. Le paramĂštre prefix est un prĂ©fixe textuel qui peut ĂȘtre utilisĂ© par les plugins de dĂ©codage logique pour reconnaĂźtre facilement les messages qui les intĂ©ressent. Le paramĂštre content est le contenu du message, donnĂ© soit au format texte soit au format binaire.


9.27.7. Fonctions de gestion des objets de la base

Les fonctions listĂ©es dans Tableau 9.94 calculent l'utilisation de l'espace disque des objets de la base, ou assistent dans la prĂ©sentation ou la comprĂ©hension de ces rĂ©sultats. Les rĂ©sultats du type bigint correspondent Ă  la taille mesurĂ©e en octets. NULL est renvoyĂ© si un OID qui ne reprĂ©sente pas un objet existant est fourni Ă  une de ces fonctions.

Tableau 9.94. Fonctions de taille des objets

Fonction

Description

pg_column_size ( "any" ) → integer

Affiche le nombre d'octets utilisés pour enregistrer une valeur individuelle. Si elle est appliquée directement à une valeur d'une colonne de la table, cela représente la compression effectuée.

pg_column_compression ( "any" ) → text

Montre l'algorithme de compression utilisé pour compresser une valeur individuelle. Retourne NULL si la valeur n'est pas compressée.

pg_database_size ( name ) → bigint

pg_database_size ( oid ) → bigint

Calcule l'espace disque total utilisĂ© par la base dont le nom ou l'OID est indiquĂ©. Pour utiliser cette fonction, vous devez avoir le droit CONNECT sur la base (qui est donnĂ© par dĂ©faut) ou ĂȘtre un membre du rĂŽle pg_read_all_stats.

pg_indexes_size ( regclass ) → bigint

Calcule l'espace disque total utilisé par les index attachés à une table spécifique.

pg_relation_size ( relation regclass [, fork text ] ) → bigint

Calcule l'espace disque utilisĂ© par un « Ă©lĂ©ment Â» de la relation indiquĂ©e. (Notez que, dans la plupart des cas, il est prĂ©fĂ©rable d'utiliser les fonctions pg_total_relation_size et pg_table_size, qui additionnent les tailles de tous les Ă©lĂ©ments d'une relation.) Avec un argument, ceci renvoie la taille de l'Ă©lĂ©ment principal de la relation. Le second argument permet de prĂ©ciser l'Ă©lĂ©ment Ă  examiner :

  • main renvoie la taille de l'Ă©lĂ©ment principal de la relation.

  • fsm renvoie la taille de la carte des espaces libres (voir Section 73.3) associĂ©e Ă  cette relation.

  • vm renvoie la taille de la carte de visibilitĂ© (voir Section 73.4) associĂ©e Ă  cette relation.

  • init renvoie la taille de l'Ă©lĂ©ment d'initialisation, si elle existe, associĂ©e Ă  cette relation.

pg_size_bytes ( text ) → bigint

Convertit la taille indiquée dans un format lisible par un humain (tel qu'il est donné par pg_size_pretty) en un nombre d'octets.

pg_size_pretty ( bigint ) → text

pg_size_pretty ( numeric ) → text

Convertit une taille indiquée en octets dans un format plus facilement lisible par un humain avec des unités (bytes, kB, MB, GB, TB ou PB suivant le cas). Notez que les unités sont des puissances de 2, plutÎt que des puissances de 10, donc 1kB vaut 1024 octets, 1MB vaut 10242 = 1048576 octets, et ainsi de suite.

pg_table_size ( regclass ) → bigint

Calcule l'espace disque utilisé par la table indiquée, en excluant les index (mais en incluant la table TOAST si elle existe, la carte des espaces libres et la carte de visibilité).

pg_tablespace_size ( name ) → bigint

pg_tablespace_size ( oid ) → bigint

Calcule l'espace disque total utilisĂ© dans le tablespace indiquĂ© par son nom ou son OID. Pour utiliser cette fonction, vous devez avoir le droit CREATE sur le tablespace ou ĂȘtre un membre du rĂŽle pg_read_all_stats, sauf s'il s'agit du tablespace par dĂ©faut de la base actuelle.

pg_total_relation_size ( regclass ) → bigint

Calcule l'espace disque utilisé par la table indiquée, en incluant tous les index et les données TOAST. Le résultat est équivalent à pg_table_size + pg_indexes_size.


Les fonctions ci-dessus qui opĂšrent sur les tables et sur les index acceptent un argument regclass, qui est simplement l'OID de la table ou de l'index dans le catalogue systĂšme pg_class. NĂ©anmoins, vous n'avez pas besoin de rechercher manuellement l'OID comme le convertisseur en entrĂ©e du type de donnĂ©es regclass fera ce travail pour vous. Voir Section 8.19 pour les dĂ©tails.

Les fonctions listĂ©es dans Tableau 9.95 assistent Ă  l'identification des fichiers spĂ©cifiques associĂ©s aux objets de la base.

Tableau 9.95. Fonctions d'emplacement des objets de la base

Fonction

Description

pg_relation_filenode ( relation regclass ) → oid

Renvoie le numĂ©ro « filenode Â» actuellement affectĂ© Ă  la relation indiquĂ©e. Ce numĂ©ro est le composant de base du nom du fichier utilisĂ© pour la relation (voir Section 73.1 pour plus d'informations). Pour la plupart des relations, le rĂ©sultat est identique Ă  pg_class.relfilenode, mais pour certains catalogues systĂšmes, le relfilenode vaut zĂ©ro et cette fonction doit ĂȘtre utilisĂ©e pour obtenir la valeur correcte. La fonction renvoie NULL si on lui passe une relation qui n'a pas de stockage, comme une vue.

pg_relation_filepath ( relation regclass ) → text

Renvoie le chemin complet avec le nom du fichier pour cette relation (chemin relatif au répertoire principal des données de l'instance, PGDATA).

pg_filenode_relation ( tablespace oid, filenode oid ) → regclass

Renvoie l'OID d'une relation d'aprĂšs l'OID de son tablespace et son filenode. Ceci est la correspondance inverse de pg_relation_filepath. Pour une relation dans le tablespace par dĂ©faut de la base, le tablespace peut ĂȘtre indiquĂ© par un zĂ©ro. Renvoie NULL si aucune relation n'est associĂ©e aux valeurs donnĂ©es dans la base en cours.


Tableau 9.96 liste les fonctions utilisĂ©es pour gĂ©rer les collations.

Tableau 9.96. Fonctions de gestion des collations

Fonction

Description

pg_collation_actual_version ( oid ) → text

Renvoie la version actuelle de l'objet collation tel qu'il est installĂ© sur le systĂšme d'exploitation. S'il est diffĂ©rent de la valeur dans pg_collation.collversion, alors les objets dĂ©pendant de la collation doivent ĂȘtre reconstruits. Voir aussi ALTER COLLATION.

pg_database_collation_actual_version ( oid ) → text

Renvoie la version actuelle de la collation de la base de donnĂ©es tel qu'elle est actuellement installĂ©e dans le systĂšme d'exploitation. Si c'est diffĂ©rent de la valeur dans pg_database.datcollversion, alors les objets dĂ©pendants de la collation pourraient avoir besoin d'ĂȘtre reconstruits. Voir aussi ALTER DATABASE.

pg_import_system_collations ( schema regnamespace ) → integer

Ajoute des collations dans le catalogue systĂšme pg_collation basĂ© sur toutes les locales trouvĂ©es dans le systĂšme d'exploitation. Ceci est ce que initdb utilise ; voir Section 24.2.2 pour plus de dĂ©tails. Si les locales supplĂ©mentaires sont installĂ©es plus tard dans le systĂšme d'exploitation, cette fonction doit ĂȘtre de nouveau exĂ©cutĂ©e pour ajouter des collations pour les nouvelles locales. Les locales correspondant Ă  des entrĂ©es existantes dans pg_collation seront ignorĂ©es. (Mais les objets de collation basĂ©s sur des locales qui ne sont plus prĂ©sentes au niveau du systĂšme d'exploitation ne sont pas supprimĂ©es par cette fonction.) Le paramĂštre schema sera typiquement pg_catalog, mais ce n'est pas obligatoire ; les collations peuvent ĂȘtre installĂ©s dans d'autres schĂ©mas. La fonction renvoie le nombre des nouveaux objets collations créés. L'utilisation de cette fonction est restreinte aux superutilisateurs.


Tableau 9.97 liste les fonctions qui fournissent des informations sur la structure des tables partitionnĂ©es.

Tableau 9.97. Fonctions d'information sur le partitionnement

Fonction

Description

pg_partition_tree ( regclass ) → setof record ( relid regclass, parentrelid regclass, isleaf boolean, level integer )

Liste les tables ou index dans l'arbre de partitionnement de la table ou de l'index partitionné indiqué, avec une ligne pour chaque partition. Les informations fournies incluent l'OID de la partition, l'OID de son parent immédiat, une valeur booléenne indiquant si la partition est une feuille et un entier indiquant son niveau dans la hiérarchie. Le niveau 0 correspond à la table ou l'index en entrée, 1 pour ses partitions immédiates, 2, pour leurs partitions, et ainsi de suite. Ne renvoie aucune ligne si la relation n'existe pas ou s'il ne s'agit ni d'une table partitionnée ni d'une partition.

pg_partition_ancestors ( regclass ) → setof regclass

Liste les relations ancĂȘtres d'une partition donnĂ©e, y compris cette relation. Ne renvoie aucune ligne si la relation n'existe pas ou s'il ne s'agit ni d'une table partitionnĂ©e ni d'une partition.

pg_partition_root ( regclass ) → regclass

Renvoie le parent de plus haut niveau de l'arbre de partition à laquelle appartient la relation donnée. Renvoie NULL si la relation n'existe pas ou s'il ne s'agit ni d'une table partitionnée ni d'une partition.


Par exemple, pour vĂ©rifier la taille totale de la donnĂ©e contenue dans une table partitionnĂ©e measurement, il est possible d'utiliser la requĂȘte suivante :

SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
  FROM pg_partition_tree('measurement');
 

9.27.8. Fonctions de maintenance des index

Tableau 9.98 liste les fonctions disponibles pour les tĂąches de maintenance d'index. (Notez que ces tĂąches de maintenance sont normalement rĂ©alisĂ©s par l'autovacuum ; l'utilisation de ces fonctions est seulement requise dans des cas particuliers.) Ces fonctions ne peuvent pas ĂȘtre exĂ©cutĂ©es lors de la restauration. L'utilisation de ces fonctions est restreinte aux superutilisateurs et au propriĂ©taire de l'index donnĂ©.

Tableau 9.98. Fonctions de maintenance des index

Fonction

Description

brin_summarize_new_values ( index regclass ) → integer

Parcourt l'index BRIN spĂ©cifiĂ© pour trouver les intervalles de blocs da la table qui ne sont pas actuellement rĂ©sumĂ©s par l'index ; pour chaque intervalle, il crĂ©e un nouvel enregistrement de rĂ©sumĂ© dans l'index en parcourant ces blocs dans la table. Renvoie le nombre de nouveaux rĂ©sumĂ©s d'intervalle de blocs insĂ©rĂ©s dans l'index.

brin_summarize_range ( index regclass, blockNumber bigint ) → integer

Résume l'intervalle de blocs couvrant le bloc donné, s'il n'est pas déjà résumé. Cela ressemble à brin_summarize_new_values, sauf qu'il traite seulement l'intervalle de blocs qui couvre le numéro de bloc de la table donnée.

brin_desummarize_range ( index regclass, blockNumber bigint ) → void

Supprime l'enregistement de l'index BRIN qui résume l'intervalle de blocs couvrant le bloc de la table donnée, s'il y en a un.

gin_clean_pending_list ( index regclass ) → bigint

Supprime la liste « pending Â» de l'index GIN spĂ©cifiĂ© en dĂ©plaçant les enregistrements Ă  l'intĂ©rieur, en masse, vers la structure principale de donnĂ©es GIN. Renvoie le nombre de blocs supprimĂ©s dans la liste d'attente. Si l'argument est un index GIN construit avec l'option fastupdate dĂ©sactivĂ©e, aucun nettoyage ne survient et le rĂ©sultat vaut zĂ©ro car l'index n'a pas de liste d'attente. Voir Section 70.4.1 et Section 70.5 pour les dĂ©tails sur la liste d'attente et l'option fastupdate.


9.27.9. Fonctions gĂ©nĂ©riques d'accĂšs aux fichiers

Les fonctions listĂ©es dans Tableau 9.99 fournissent des accĂšs natifs aux fichiers du serveur gĂ©rant le serveur. Seuls les fichiers Ă  l'intĂ©rieur du rĂ©pertoire d'instance de la base et ceux ciblĂ©s par le paramĂštre log_directory peuvent ĂȘtre accĂ©dĂ©s, que l'utilisateur est un superutilisateur ou s'est vu donnĂ© le rĂŽle pg_read_server_files. Utilisez un chemin relatif pour les fichiers du rĂ©pertoire principal des donnĂ©es, et un chemin correspondant Ă  la configuration du paramĂštre log_directory pour les fichiers de trace.

Notez que donner aux utilisateurs le droit EXECUTE sur pg_read_file(), ou les fonctions relatives, les autorise Ă  lire tout fichier du serveur que le processus serveur peut lire. Ces fonctions contournent toutes les vĂ©rifications de droit d'accĂšs Ă  la base. Ceci signifie que, pour un exemple, un utilisateur avec un tel accĂšs est capable de lire le contenu de la table pg_authid oĂč l'information d'authentification est stockĂ©e dans les donnĂ©es de la table de la base. De ce fait, donner l'accĂšs Ă  ces fonctions devrait ĂȘtre considĂ©rĂ© avec attention.

Certaines de ces fonctions prennent un paramÚtre missing_ok qui modifie le comportement quand le fichier ou le répertoire n'existe pas. Si true, la fonction renvoie NULL ou un ensemble vide de résultats, comme approprié. Si false, une erreur est levée. La valeur par défaut est false.

Tableau 9.99. Fonctions gĂ©nĂ©riques d'accĂšs aux fichiers

Fonction

Description

pg_ls_dir ( dirname text [, missing_ok boolean, include_dot_dirs boolean ] ) → setof text

Renvoie le nom de tous les fichiers (et rĂ©pertoires et autres fichiers spĂ©ciaux) dans le rĂ©pertoire donnĂ©. Le paramĂštre include_dot_dirs indique si les pseudo-rĂ©pertoires « . Â» et « .. Â» sont Ă  inclure dans le rĂ©sultat ; par dĂ©faut, ils sont exclus. Les inclure peut ĂȘtre utile dans missing_ok vaut true pour distinguer un rĂ©pertoire vide d'un rĂ©pertoire inexistant.

Cette fonction est restreinte par défaut aux superutilisateurs, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

pg_ls_logdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire des traces du serveur. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte par défaut aux superutilisateurs et aux utilisateurs membres du rÎle pg_monitor, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

pg_ls_waldir () → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire des journaux de transactions. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte aux superutilisateurs et aux rÎles ayant les droits du rÎle pg_monitor par défaut, mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter la fonction.

pg_ls_logicalmapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire pg_logical/mappings. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte aux superutilisateurs et aux rÎles ayant les droits du rÎle pg_monitor par défaut, mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter la fonction.

pg_ls_logicalsnapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire pg_logical/snapshots. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte aux superutilisateurs et aux rÎles ayant les droits du rÎle pg_monitor par défaut, mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter la fonction.

pg_ls_replslotdir ( slot_name text ) → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire pg_replslot/slot_name. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte aux superutilisateurs et aux rÎles ayant les droits du rÎle pg_monitor par défaut, mais les autres utilisateurs peuvent se voir donner le droit EXECUTE pour exécuter la fonction.

pg_ls_archive_statusdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire des statuts d'archivage. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte par défaut aux superutilisateurs et aux utilisateurs membres du rÎle pg_monitor, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

pg_ls_tmpdir ( [ tablespace oid ] ) → setof record ( name text, size bigint, modification timestamp with time zone )

Renvoie le nom, la taille et l'horodatage de la derniÚre modification de chaque fichier ordinaire dans le répertoire des fichiers temporaires pour le tablespace indiqué. Si tablespace est omis, le tablespace pg_default est examiné. Les fichiers dont le nom commence avec un point, les répertoires et les autres fichiers spéciaux sont exclus.

Cette fonction est restreinte par défaut aux superutilisateurs et aux utilisateurs membres du rÎle pg_monitor, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

pg_read_file ( filename text [, offset bigint, length bigint [, missing_ok boolean ]] ) → text

Renvoie tout ou partie d'un fichier texte, en commençant Ă  l'octet indiquĂ© par offset, en renvoyant au plus length octets (moins si la fin du fichier est atteinte avant). Si offset est nĂ©gatif, il est relatif Ă  la fin du fichier. Si offset et length sont omis, le fichier entier est renvoyĂ©. Les octets lus dans le fichier sont interprĂ©tĂ©s comme une chaĂźne dans l'encodage de la base ; une erreur est renvoyĂ©e s'ils ne sont pas valides pour cet encodage.

Cette fonction est restreinte par défaut aux superutilisateurs, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

pg_read_binary_file ( filename text [, offset bigint, length bigint [, missing_ok boolean ]] ) → bytea

Renvoie tout ou partie d'un fichier. Cette fonction est identique Ă  pg_read_file sauf qu'elle peut lire toute donnĂ©e binaire, en renvoyant le rĂ©sultat sous la forme d'un bytea, et non pas d'un text ; de ce fait, aucune vĂ©rification d'encodage n'est rĂ©alisĂ©e.

Cette fonction est restreinte par défaut aux superutilisateurs, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.

En combinant avec la fonction convert_from, cette fonction peut ĂȘtre utilisĂ©e pour lire un fichier texte dans un encodage spĂ©cial et le convertir dans l'encodage de la base :

SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
      

pg_stat_file ( filename text [, missing_ok boolean ] ) → record ( size bigint, access timestamp with time zone, modification timestamp with time zone, change timestamp with time zone, creation timestamp with time zone, isdir boolean )

Renvoie un enregistement contenant la taille du fichier, son horodatage de dernier accÚs, celui de derniÚre modification, celui de dernier changement de statut (plateformes Unix uniquement), l'horodatage de création (Windows uniquement), et un drapeau indiquant si c'est un répertoire.

Cette fonction est restreinte par défaut aux superutilisateurs, mais d'autres utilisateurs peuvent se voir donner le droit EXECUTE pour cette fonction.


9.27.10. Fonctions sur les verrous consultatifs

Les fonctions listĂ©es dans Tableau 9.100 gĂšrent les verrous consultatifs. Pour les dĂ©tails sur une utilisation correcte de ces fonctions, voir Section 13.3.5.

Toutes ces fonctions ont pour but d'ĂȘtre utilisĂ©es pour verrouiller des ressources dĂ©finies par l'application, qui peuvent ĂȘtre identifiĂ©es soit par une valeur de clĂ© sur 64 bits, soit par deux valeurs de clĂ©s sur 32 bits (notez que ces deux espaces de clĂ©s ne se surchargent pas). Si une autre session dĂ©tient dĂ©jĂ  un verrou conflictuel sur le mĂȘme identifiant de ressource, les fonctions devront soit attendre que la ressource devienne disponible, soit renvoyer un rĂ©sultat false, comme appropriĂ© pour la fonction. Les verrous peuvent ĂȘtre soit partagĂ©s soit exclusifs ; un verrou partagĂ© n'entre pas en conflit avec d'autres verrous partagĂ©s sur la mĂȘme ressource, mais entre en conflit avec les verrous exclusifs. Les verrous peuvent se prendre au niveau de la session (pour qu'ils soient dĂ©tenus jusqu'Ă  leur suppression ou jusqu'Ă  la fin de la session) ou au niveau de la transaction (pour qu'ils soient dĂ©tenus jusqu'Ă  la fin de la transaction ; il n'existe pas de moyen pour les supprimer manuellement). Les demandes multiples de verrou au niveau session s'empilent, pour que, si le mĂȘme identifiant de ressource est verrouillĂ© trois fois, alors il doit y avoir trois demandes de dĂ©verrouillage pour relĂącher la ressource avant que la session se termine.

Tableau 9.100. Fonctions pour les verrous informatifs

Fonction

Description

pg_advisory_lock ( key bigint ) → void

pg_advisory_lock ( key1 integer, key2 integer ) → void

Obtient un verrou informatif exclusif niveau session, en attendant si nécessaire.

pg_advisory_lock_shared ( key bigint ) → void

pg_advisory_lock_shared ( key1 integer, key2 integer ) → void

Obtient un verrou informatif partagé niveau session, en attendant si nécessaire.

pg_advisory_unlock ( key bigint ) → boolean

pg_advisory_unlock ( key1 integer, key2 integer ) → boolean

Relùche un verrou informatif exclusif niveau session précédemment acquis. Renvoie true si le verrou a été relùché avec succÚs. Si le verrou n'était pas détenu, false est renvoyé et, en plus, un message d'avertissement SQL est reporté au serveur.

pg_advisory_unlock_all () → void

RelĂąche tous les verrous informatifs niveau session dĂ©tenus par la session en cours. (Cette fonction est appelĂ©e implicitement Ă  la fin d'une session, mĂȘme si le client s'est mal dĂ©connectĂ©.)

pg_advisory_unlock_shared ( key bigint ) → boolean

pg_advisory_unlock_shared ( key1 integer, key2 integer ) → boolean

Relùche un verrou informatif partagé niveau session précédemment acquis. Renvoie true si le verrou a été relùché avec succÚs. Si le verrou n'était pas détenu, false est renvoyé et, en plus, un message d'avertissement SQL est reporté au serveur.

pg_advisory_xact_lock ( key bigint ) → void

pg_advisory_xact_lock ( key1 integer, key2 integer ) → void

Obtient un verrou informatif exclusif niveau transaction, en attendant si nécessaire.

pg_advisory_xact_lock_shared ( key bigint ) → void

pg_advisory_xact_lock_shared ( key1 integer, key2 integer ) → void

Obtient un verrou informatif partagé niveau transaction, en attendant si nécessaire.

pg_try_advisory_lock ( key bigint ) → boolean

pg_try_advisory_lock ( key1 integer, key2 integer ) → boolean

Obtient un verrou informatif exclusif niveau session si disponible. Cela va soit obtenir immĂ©diatement le verrou et renvoyer true, soit renvoyer false sans attendre si le verrou ne peut pas ĂȘtre acquis immĂ©diatement.

pg_try_advisory_lock_shared ( key bigint ) → boolean

pg_try_advisory_lock_shared ( key1 integer, key2 integer ) → boolean

Obtient un verrou informatif partagĂ© niveau session si disponible. Cela va soit obtenir immĂ©diatement le verrou et renvoyer true, soit renvoyer false sans attendre si le verrou ne peut pas ĂȘtre acquis immĂ©diatement.

pg_try_advisory_xact_lock ( key bigint ) → boolean

pg_try_advisory_xact_lock ( key1 integer, key2 integer ) → boolean

Obtient un verrou informatif exclusif niveau transaction si disponible. Cela va soit obtenir immĂ©diatement le verrou et renvoyer true, soit renvoyer false sans attendre si le verrou ne peut pas ĂȘtre acquis immĂ©diatement.

pg_try_advisory_xact_lock_shared ( key bigint ) → boolean

pg_try_advisory_xact_lock_shared ( key1 integer, key2 integer ) → boolean

Obtient un verrou informatif partagĂ© niveau transaction si disponible. Cela va soit obtenir immĂ©diatement le verrou et renvoyer true, soit renvoyer false sans attendre si le verrou ne peut pas ĂȘtre acquis immĂ©diatement.