Documentation PostgreSQL 8.3.23 > Langage SQL > Fonctions et opérateurs > Fonctions d'administration système | |
Fonctions d'informations système | Conversion de types |
Le Tableau 9.51, « Fonctions agissant sur les paramètres de configuration » affiche les fonctions disponibles pour consulter et modifier les paramètres de configuration en exécution.
Tableau 9.51. Fonctions agissant sur les paramètres de configuration
Nom | Type de retour | Description |
---|---|---|
current_setting (nom_paramètre) | text | valeur courante du paramètre |
set_config (nom_paramètre, , nouvelle_valeur, , est_local) | text | configure le paramètre et renvoie la nouvelle valeur |
La fonction current_setting renvoie la valeur courante du paramètre nom_paramètre. Elle correspond à la commande SQL SHOW. Par exemple :
SELECT current_setting('datestyle'); current_setting ----------------- ISO, MDY (1 row)
set_config positionne le paramètre nom_paramètre à nouvelle_valeur. Si est_local vaut true, la nouvelle valeur s'applique uniquement à la transaction en cours. Si la nouvelle valeur doit s'appliquer à la session en cours, on utilise false. La fonction correspond à la commande SQL SET. Par exemple :
SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row)
Les fonctions présentées dans le Tableau 9.52, « Fonctions d'envoi de signal au serveur » envoient des signaux de contrôle aux autres processus serveur. L'utilisation de ces fonctions est restreinte aux superutilisateurs.
Tableau 9.52. Fonctions d'envoi de signal au serveur
Nom | Type de retour | Description |
---|---|---|
pg_cancel_backend (pid int) | boolean | Annule une requête en cours sur le serveur |
pg_reload_conf() | boolean | Impose le rechargement des fichiers de configuration par les processus serveur |
pg_rotate_logfile() | boolean | Impose une rotation du journal des traces du serveur |
Ces fonctions renvoient true en cas de succès, false en cas d'échec.
pg_cancel_backend envoie un signal demandant l'annulation de la requête (SIGINT) à un processus serveur identifié par l'ID du processus. L'identifiant du processus serveur actif peut être trouvé dans la colonne procpid dans la vue pg_stat_activity ou en listant les processus postgres sur le serveur avec ps.
pg_reload_conf envoie un signal SIGHUP au serveur, ce qui impose le rechargement des fichiers de configuration par tous les processus serveur.
pg_rotate_logfile signale au gestionnaire de journaux de trace de basculer immédiatement vers un nouveau fichier de sortie. Cela ne fonctionne que lorsque le collecteur de traces interne est actif, puisqu'il n'y a pas de sous-processus de gestion des fichiers journaux dans le cas contraire.
Les fonctions présentées dans le Tableau 9.53, « Fonctions de contrôle de la sauvegarde » aident à l'exécution de sauvegardes à chaud. L'utilisation des trois premières fonctions est réservée aux superutilisateurs.
Tableau 9.53. Fonctions de contrôle de la sauvegarde
Nom | Type de retour | Description |
---|---|---|
pg_start_backup (label text) | text | Préparation de la sauvegarde à chaud |
pg_stop_backup() | text | Arrêt de la sauvegarde à chaud |
pg_switch_xlog() | text | Passage forcé à un nouveau journal de transactions |
pg_current_xlog_location() | text | Récupération de l'emplacement d'écriture du journal de transactions courant |
pg_current_xlog_insert_location() | text | Récupération de l'emplacement d'insertion du journal de transactions courant |
pg_xlogfile_name_offset(location text) | text, integer | Conversion de la chaîne décrivant l'emplacement du journal de transactions en nom de fichier et décalage en octets dans le fichier |
pg_xlogfile_name(location text) | text | Conversion de la chaîne décrivant l'emplacement du journal de transactions en nom de fichier |
pg_start_backup accepte un paramètre unique, label utilisateur de la sauvegarde (typiquement, le nom du fichier d'enregistrement de la sauvegarde). La fonction écrit un fichier de label dans le répertoire de données du cluster et renvoie la position du début de la sauvegarde dans le journal de transactions au format texte. Ce résultat ne nécessite pas qu'on s'y intéresse, mais il est fourni dans cette éventualité.
postgres=# select pg_start_backup('le_label_ici'); pg_start_backup ----------------- 0/D4445B8 (1 row)
pg_stop_backup supprime le fichier de label créé par pg_start_backup et crée, à la place, un fichier d'historique dans l'aire de stockage des archives des journaux de transactions. Ce fichier contient le label passé à pg_start_backup, les emplacements de début et de fin des journaux de transactions correspondant à la sauvegarde et les heures de début et de fin de la sauvegarde. La valeur de retour est l'emplacement du journal de la transaction de fin de sauvegarde (de peu d'intérêt, là encore). Après notification de l'emplacement de fin, le point d'insertion courant du journal de transactions est automatiquement avancé au prochain journal de transactions, de façon à ce que le journal de transactions de fin de sauvegarde puisse être archivé immédiatement pour terminer la sauvegarde.
pg_switch_xlog bascule sur le prochain journal de transactions, ce qui permet d'archiver le journal courant (en supposant que l'archivage continu soit utilisé). La fonction retourne l'emplacement de la transaction finale + 1 dans le journal ainsi terminé. S'il n'y a pas eu d'activité dans les journaux de transactions depuis le dernier changement de journal, pg_switch_xlog ne fait rien et renvoie l'emplacement de fin du journal de transactions en cours.
pg_current_xlog_location affiche la position d'écriture du journal de transactions en cours dans le même format que celui utilisé dans les fonctions ci-dessus. De façon similaire, pg_current_xlog_insert_location affiche le point d'insertion dans le journal de transactions courant. Le point d'insertion est la fin « logique » du journal de transactions à tout instant alors que l'emplacement d'écriture est la fin de ce qui a déjà été écrit à partir des tampons internes du serveur. La position d'écriture est la fin de ce qui peut être examiné extérieurement au serveur. C'est habituellement l'information nécessaire à qui souhaite archiver des journaux de transactions partiels. Le point d'insertion n'est donné principalement que pour des raisons de débogage du serveur. Il s'agit là d'opérations de lecture seule qui ne nécessitent pas de droits superutilisateur.
pg_xlogfile_name_offset peut être utilisée pour extraire le nom du journal de transactions correspondant et le décalage en octets à partir du résultat de n'importe quelle fonction ci-dessus. Par exemple :
postgres=# select * from pg_xlogfile_name_offset(pg_stop_backup()); file_name | file_offset --------------------------+------------- 00000001000000000000000D | 4039624 (1 row)
De façon similaire, pg_xlogfile_name n'extrait que le nom du journal de la transaction. Quand la position dans le journal de la transaction donnée est exactement sur une limite de journal, les deux fonctions renvoient le nom du journal précédent. C'est généralement le comportement souhaité pour gérer l'archivage des journaux, car le fichier précédent est le dernier à devoir être archivé.
Pour les détails sur le bon usage de ces fonctions, voir la Section 24.3, « Archivage continu et récupération d'un instantané (PITR) ».
Les fonctions présentées dans le Tableau 9.54, « Fonctions de calcul de la taille des objets de la base de données » calculent l'utilisation de l'espace disque par les objets de la base de données.
Tableau 9.54. Fonctions de calcul de la taille des objets de la base de données
Nom | Code de retour | Description |
---|---|---|
pg_column_size(any) | int | Nombre d'octets utilisés pour stocker une valeur particulière (éventuellement compressée) |
pg_database_size(oid) | bigint | Espace disque utilisé par la base de données d'OID indiqué |
pg_database_size(name) | bigint | Espace disque utilisé par la base de données de nom indiqué |
pg_relation_size(oid) | bigint | Espace disque utilisé par la table ou l'index d'OID indiqué |
pg_relation_size(text) | bigint | Espace disque utilisé par la table ou l'index de nom indiqué. Le nom de la table peut être qualifié par un nom de schéma. |
pg_size_pretty(bigint) | text | Convertit une taille en octets en format interprétable par l'utilisateur avec unités |
pg_tablespace_size(oid) | bigint | Espace disque utilisé par le tablespace d'OID indiqué |
pg_tablespace_size(name) | bigint | Espace disque utilisé par le tablespace de nom indiqué |
pg_total_relation_size(oid) | bigint | Espace disque total occupé par la table d'OID indiqué, en incluant les index et les données TOASTées |
pg_total_relation_size(text) | bigint | Espace disque total utilisé par la table de nom indiqué, en incluant les index et les données TOASTées. Le nom de la table peut être qualifié par un nom de schéma |
pg_column_size affiche l'espace utilisé pour stocker toute valeur individuelle.
pg_database_size et pg_tablespace_size acceptent l'OID ou le nom d'une base de données ou d'un tablespace et renvoient l'espace disque total utilisé.
pg_relation_size accepte l'OID ou le nom d'une table, d'un index ou d'une table toast et renvoie la taille en octets.
pg_size_pretty peut être utilisé pour formater le résultat d'une des autres fonctions de façon interprétable par l'utilisateur, en utilisant kB, MB, GB ou TB suivant le cas.
pg_total_relation_size accepte l'OID ou le nom d'une table ou d'une table toast, et renvoie la taille en octets des données et de tous les index et tables toast associées.
Les fonctions présentées dans le Tableau 9.55, « Fonctions d'accès générique aux fichiers » fournissent un accès natif aux fichiers situés sur le serveur. Seuls les fichiers contenus dans le répertoire du cluster et ceux du répertoire log_directory sont accessibles. On utilise un chemin relatif pour les fichiers contenus dans le répertoire du cluster et un chemin correspondant à la configuration du paramètre log_directory pour les journaux de trace. L'utilisation de ces fonctions est restreinte aux superutilisateurs.
Tableau 9.55. Fonctions d'accès générique aux fichiers
Nom | Code de retour | Description |
---|---|---|
pg_ls_dir(nom_répertoire text) | setof text | Liste le contenu d'un répertoire |
pg_read_file(nom_fichier text, décalage bigint, longueur bigint) | text | Renvoie le contenu d'un fichier texte |
pg_stat_file(nom_fichier text) | record | Renvoie les informations concernant un fichier |
pg_ls_dir renvoie tous les noms contenus dans le répertoire indiqué, à l'exception des entrées spéciales « . » et « .. ».
pg_read_file renvoie une partie d'un fichier texte, débutant au décalage indiqué, renvoyant au plus longueur octets (moins si la fin du fichier est atteinte avant). Si le décalage est négatif, il est relatif à la fin du fichier.
pg_stat_file renvoie un enregistrement contenant la taille du fichier, les date et heure de dernier accès, les date et heure de dernière modification, les date et heure de dernier changement de statut (plateformes Unix seulement), les date et heure de création (Windows seulement) et un booléen indiquant s'il s'agit d'un répertoire. Les usages habituels incluent :
SELECT * FROM pg_stat_file('nomfichier'); SELECT (pg_stat_file('nomfichier')).modification;
Les fonctions présentées dans Tableau 9.56, « Fonctions de verrous consultatifs » gèrent les verrous consultatifs. Pour les détails sur le bon usage de ces fonctions, voir Section 13.3.4, « Verrous informatifs ».
Tableau 9.56. Fonctions de verrous consultatifs
Nom | Type renvoyé | Description |
---|---|---|
pg_advisory_lock(key bigint) | void | Obtient un verrou consultatif exclusif |
pg_advisory_lock(key1 int, key2 int) | void | Obtient un verrou consultatif exclusif |
pg_advisory_lock_shared(key bigint) | void | Obtient un verrou consultatif partagé |
pg_advisory_lock_shared(key1 int, key2 int) | void | Obtient un verrou consultatif partagé |
pg_try_advisory_lock(key bigint) | boolean | Obtient un verrou consultatif exclusif si disponible |
pg_try_advisory_lock(key1 int, key2 int) | boolean | Obtient un verrou consultatif exclusif si disponible |
pg_try_advisory_lock_shared(key bigint) | boolean | Obtient un verrou consultatif partagé si disponible |
pg_try_advisory_lock_shared(key1 int, key2 int) | boolean | Obtient un verrou consultatif partagé si disponible |
pg_advisory_unlock(key bigint) | boolean | Relâche un verrou consultatif exclusif |
pg_advisory_unlock(key1 int, key2 int) | boolean | Relâche un verrou consultatif exclusif |
pg_advisory_unlock_shared(key bigint) | boolean | Relâche un verrou consultatif partagé |
pg_advisory_unlock_shared(key1 int, key2 int) | boolean | Relâche un verrou consultatif partagé |
pg_advisory_unlock_all() | void | Relâche tous les verrous consultatifs détenus par la session en cours |
pg_advisory_lock verrouille une ressource applicative qui peut être identifiée soit par une valeur de clé sur 64 bits soit par deux valeurs de clé sur 32 bits (les deux espaces de clé ne se surchargent pas). Si une autre session détient déjà un verrou sur la même ressource, la fonction attend que la ressource devienne disponible. Le verrou est exclusif. Les demandes de verrou s'empilent de sorte que, si une même ressource est verrouillée trois fois, elle doit être déverrouillée trois fois pour être disponible par les autres sessions.
pg_advisory_lock_shared fonctionne de façon identique à pg_advisory_lock sauf que le verrou peut être partagé avec d'autres sessions qui réclament des verrous partagés. Seules les demandes de verrou exclusif sont bloquées.
pg_try_advisory_lock est similaire à pg_advisory_lock sauf que la fonction n'attend pas la disponibilité du verrou. Si le verrou peut être obtenu immédiatement, la fonction renvoie true, sinon, elle renvoie false.
pg_try_advisory_lock_shared fonctionne de la même façon que pg_try_advisory_lock sauf qu'elle tente d'acquérir un verrou partagé au lieu d'un verrou exclusif.
pg_advisory_unlock relâche un verrou exclusif précédemment acquis. Elle retourne true si le verrou est relaché avec succès. Si le verrou n'était pas détenu, false est renvoyé et un message d'avertissement SQL est émis par le serveur.
pg_advisory_unlock_shared fonctionne de la même façon que pg_advisory_unlock mais pour relâcher un verrou partagé.
pg_advisory_unlock_all relâche tous les verrous consultatifs détenus par la session courante. (Cette fonction est appelée implicitement à la fin de la session, même si le client se déconnecte brutalement.)