Liste et modification des paramètres d'un cluster PostgreSQL
posté le 12 janvier 2022
la commande SHOW ALL liste l'ensemble des paramètres utilisés par le cluster (définis dans le fichier de configuration ou non) sur trois colonnes (name, setting, description).
Au travers de cette commande, vous avez accès à la liste exhaustive des paramètres du cluster, les valeurs assignées en cours d'utilisation ainsi qu'une description complète du paramètre.
postgres=# show all;
name | setting | description
-----------------------+--------------------------+------------------------------------------------------------------
allow_system_table_mods| off | Allows modifications of the structure of system tables.
application_name | psql | Sets the application name to be reported in statistics and logs.
(extrait du listing)
La table listée dans la commande show all correspond à la table pg_settings. Cette table contient plus d'informations que la liste obtenue par show all :
postgres=# \d pg_settings
Vue « pg_catalog.pg_settings »
Colonne | Type | Collationnement | NULL-able | Par défaut
-----------------+---------+-----------------+-----------+------------
name | text | | |
setting | text | | |
unit | text | | |
category | text | | |
short_desc | text | | |
extra_desc | text | | |
context | text | | |
vartype | text | | |
source | text | | |
min_val | text | | |
max_val | text | | |
enumvals | text[] | | |
boot_val | text | | |
reset_val | text | | |
sourcefile | text | | |
sourceline | integer | | |
pending_restart | boolean | | |
On peut, bien sur, effectuer de requêtes ciblées pour n'obtenir que les valeurs souhaitées, par exemple, tous les paramètres dont le nom contient 'connect' :
postgres=# select name, setting from pg_settings where name like '%connect%';
name | setting
----------------------------------+---------
client_connection_check_interval | 0
log_connections | off
log_disconnections | off
max_connections | 300
superuser_reserved_connections | 3
(5 lignes)
Pour modifier la valeur d'un paramètre dans une session PostgreSQL, on utilise la syntaxe suivante (modification du nombre de connexions sur le cluster) :
postgres=# alter system set max_connections = 200;
Certains paramètres ne sont pas dynamiques, comme max_connections, et donc la requête précédente donnera toujours la même valeur pour le paramètre max_connetions soit 300 :
postgres=# select name, setting from pg_settings where name like '%connect%';
name | setting
----------------------------------+---------
client_connection_check_interval | 0
log_connections | off
log_disconnections | off
max_connections | 300
superuser_reserved_connections | 3
(5 lignes)
Bien sur, on peut lister l'ensemble du contenu des fichiers avec un simple type ou cat, mais lorsque que l'on souhaite lister ces paramètres au travers d'un requête, on peut utiliser les commandes suivantes
select * from pg_file_settings;
ou avec la requête équivalente pur toutes les colonnes :
TABLE pg_file_settings;
On peut trouver notre valeur affectée à max_connections :
postgres=# select sourcefile, name, setting from pg_file_settings where name like '%connect%';
sourcefile | name | setting
-------------------------------------+-----------------+---------
/xanata/pgdata/postgresql.conf | max_connections | 300
/xanata/pgdata/postgresql.auto.conf | max_connections | 200
(2 lignes)
Dans cette liste on observe que le fichier postgresql.conf contient la valeur actuelle, soit 300, mais que ma commande alter system set max_connections = 200; à rajouté une valeur dans le fichier postgresql.auto.conf.
Au redémarrage du cluster, la valeur sera prise en compte.
La liste des paramètres au travers de la vue pg_file_settings montre bien le contenu du fichier de configuration, sans les valeurs en commentaire et après interprétation du contenu. Ceci est un bon moyen de contrôler les valeurs saisies manuellement dans ce fichier.