Saya bisa melihat arus search_path
dengan:
show search_path ;
Dan saya dapat mengatur search_path
untuk sesi saat ini dengan:
set search_path = "$user", public, postgis;
Juga, saya dapat secara permanen mengatur search_path
untuk database yang diberikan dengan:
alter database mydb set search_path = "$user", public, postgis ;
Dan saya dapat secara permanen mengatur peran yangsearch_path
diberikan (pengguna) dengan:
alter role johnny set search_path = "$user", public, postgis ;
Tapi saya ingin tahu bagaimana menentukan basis data dan pengaturan peran (sehubungan dengan search_path
) sebelum mengubahnya?
sumber
alter role myrole set search_path = "$user", public, postgis ;
saya perhatikan bahwapg_roles.rolconfig
(sesuai dengan peran saya) mendapat nilai{"search_path=\"$user\", public, postgis"}
. Juga,select * from pg_db_role_setting ;
sekarang menunjukkan baris tambahan. Dan setelah mengeksekusialter database mydb set search_path = "$user", public, postgis ;
saya melihat baris yang sesuai diselect * from pg_db_role_setting ;
- pada akhirnya, saya tidak yakin bagaimana "membatalkan" perubahan ini.Pengaturan permanen untuk database dan peran disimpan di tabel sistem cluster-lebar pg_db_role_settings .
Hanya pengaturan yang diubah yang ada. Jika jalur pencarian tidak pernah dimodifikasi untuk database atau peran, saya kira itu bisa diasumsikan
"$user",public
.Nilai pengaturan sebelum perubahan apa pun, termasuk di tingkat klaster (melalui konfigurasi global
postgresql.conf
) dapat ditanyakan dari database dengan:Nilai pengaturan sebelum perubahan dalam sesi (melalui
SET
perintah) dapat ditanyakan dari database dengan:Ketika menetapkan nilai non-default
postgresql.conf
, tidak mudah untuk mendapatkan nilai itu dalam SQL secara independen dari sesi saat ini .pg_settings.boot_val
tidak akan melakukannya karena mengabaikan perubahan dalam file konfigurasi, danpg_settings.reset_val
juga tidak, karena dipengaruhi oleh pengaturan basis data / pengguna yang berpotensi diaturALTER USER/ALTER DATABASE
. Cara paling sederhana untuk DBA untuk mendapatkan nilai adalah dengan mencarinya sajapostgresql.conf
. Jika tidak, lihat Reset pencarian_path ke global, default cluster yang mencakup topik ini secara detail.sumber
boot_val
sebenarnya bawaan pabrik yang dikompilasi, bukan pengaturan dipostgresql.conf
?reset_val
bukanboot_val
.reset_val
. Saya menemukan pertanyaan lama ini meneliti yang baru-baru ini: dba.stackexchange.com/questions/145280/…Benar untuk postgres dan Redshift. Ini kelihatannya terlalu sederhana dibandingkan dengan jawaban sebelumnya yang bergantung pada
pg_db_role_setting
, tetapiuseconfig
kolom akan memiliki daftar konfigurasi pengguna termasuksearch_path
, diformat sebagai daftar.pg_user Dokumentasi Postgres ada di sini
Untuk lebih selektif:
Saya pikir tabel pengguna ini berisi semua pengguna di cluster, bukan hanya db spesifik - tapi saya tidak memverifikasi itu.
sumber