Puedo ver la corriente search_path
con:
show search_path ;
Y puedo configurar el search_path
para la sesión actual con:
set search_path = "$user", public, postgis;
Además, puedo configurar permanentemente search_path
para una base de datos dada con:
alter database mydb set search_path = "$user", public, postgis ;
Y puedo configurar permanentemente search_path
un rol determinado (usuario) con:
alter role johnny set search_path = "$user", public, postgis ;
Pero me gustaría saber cómo determinar cuáles son las bases de datos y las configuraciones de roles (con respecto a search_path
) antes de modificarlas.
fuente
alter role myrole set search_path = "$user", public, postgis ;
, noté quepg_roles.rolconfig
(correspondiente a mi rol) obtuve el valor{"search_path=\"$user\", public, postgis"}
. Además,select * from pg_db_role_setting ;
ahora muestra una fila adicional. Y después de ejecutaralter database mydb set search_path = "$user", public, postgis ;
, veo una fila correspondienteselect * from pg_db_role_setting ;
; al final, no estoy seguro de cómo "deshacer" estos cambios.Las configuraciones permanentes para las bases de datos y los roles se almacenan en la tabla de todo el clúster del sistema pg_db_role_settings .
Solo las configuraciones alteradas están presentes. Si la ruta de búsqueda nunca se modificó para una base de datos o un rol, supongo que se puede suponer
"$user",public
.El valor de la configuración antes de cualquier cambio, incluso a nivel de clúster (a través de la configuración global
postgresql.conf
) se puede consultar desde la base de datos con:El valor de la configuración antes de cualquier cambio dentro de la sesión (a través del
SET
comando) se puede consultar desde la base de datos con:Cuando se establece un valor no predeterminado en
postgresql.conf
, no es sencillo obtener ese valor en SQL independientemente de la sesión actual .pg_settings.boot_val
no lo hará porque ignora los cambios en el archivo de configuración, ypg_settings.reset_val
tampoco lo hará, porque está influenciado por la configuración de la base de datos / usuario potencialmente establecidaALTER USER/ALTER DATABASE
. La forma más simple para que un DBA obtenga el valor es simplemente buscarlopostgresql.conf
. De lo contrario, vea Restablecer ruta de búsqueda al valor predeterminado global del clúster que cubre este tema en detalle.fuente
boot_val
realmente el valor predeterminado de fábrica compilado, no la configuraciónpostgresql.conf
?reset_val
lugar deboot_val
.reset_val
. Me topé con esta vieja pregunta investigando esta reciente: dba.stackexchange.com/questions/145280/…Es cierto para postgres y Redshift. Esto parece demasiado simple en comparación con las respuestas anteriores que dependen
pg_db_role_setting
, pero lauseconfig
columna tendrá una lista de configuraciones de usuariosearch_path
, incluida , formateada como una lista.pg_user La documentación de Postgres está aquí
Para ser más selectivo:
Creo que esta tabla de usuarios contiene todos los usuarios en el clúster, no solo db específico, pero no lo verifiqué.
fuente