Je peux voir le courant search_path
avec:
show search_path ;
Et je peux définir le search_path
pour la session en cours avec:
set search_path = "$user", public, postgis;
De plus, je peux définir de manière permanente le search_path
pour une base de données donnée avec:
alter database mydb set search_path = "$user", public, postgis ;
Et je peux définir de manière permanente le search_path
pour un rôle donné (utilisateur) avec:
alter role johnny set search_path = "$user", public, postgis ;
Mais j'aimerais savoir comment déterminer quels sont les paramètres de base de données et de rôle (en ce qui concerne search_path
) avant de les modifier?
la source
alter role myrole set search_path = "$user", public, postgis ;
j'ai remarqué quepg_roles.rolconfig
(correspondant à mon rôle) avait obtenu la valeur{"search_path=\"$user\", public, postgis"}
. En outre,select * from pg_db_role_setting ;
affiche maintenant une ligne supplémentaire. Et après exécution,alter database mydb set search_path = "$user", public, postgis ;
je vois une ligne correspondanteselect * from pg_db_role_setting ;
- à la fin, je ne sais pas comment "annuler" ces modifications.Les paramètres permanents des bases de données et des rôles sont stockés dans la table pg_db_role_settings à l' échelle du cluster.
Seuls les paramètres modifiés sont présents. Si le chemin de recherche n'a jamais été modifié pour une base de données ou un rôle, j'imagine qu'il peut l'être
"$user",public
.La valeur du paramètre avant toute modification, y compris au niveau du cluster (via la configuration globale
postgresql.conf
) peut être interrogée à partir de la base de données avec:La valeur du paramètre avant toute modification dans la session (via la
SET
commande) peut être interrogée à partir de la base de données avec:Lorsqu'une valeur autre que celle par défaut est définie
postgresql.conf
, il n'est pas simple d'obtenir cette valeur en SQL indépendamment de la session en cours .pg_settings.boot_val
ne le fera pas car il ignore les modifications apportées au fichier de configuration etpg_settings.reset_val
ne le fait pas non plus, car il est influencé par les paramètres de base de données / utilisateur potentiellement définisALTER USER/ALTER DATABASE
. Pour un administrateur de base de données, le moyen le plus simple d'obtenir cette valeur consiste à le rechercherpostgresql.conf
. Sinon, voir Réinitialiser search_path sur la valeur globale par défaut du cluster, qui couvre ce sujet en détail.la source
boot_val
réellement le défaut d'usine compilé, ni le réglagepostgresql.conf
?reset_val
lieu deboot_val
.reset_val
. Je suis tombé sur cette vieille question à la recherche de celle-ci: dba.stackexchange.com/questions/145280/…Vrai pour postgres et redshift. Cela semble trop simple comparé aux réponses précédentes qui en dépendent
pg_db_role_setting
, mais lauseconfig
colonne aura une liste de configurations d’utilisateurs incluantsearch_path
, formatées en liste.La documentation de Postgres est ici
Pour être plus sélectif:
Je pense que cette table d'utilisateurs contient tous les utilisateurs du cluster, pas seulement la base de données spécifique - mais je n'ai pas vérifié cela.
la source