Atur Jalur Skema Postgresql secara Permanen

136

Saya perlu mengatur path schema di Postgres sehingga saya tidak setiap waktu menentukan schema dot table misalnya schema2.table. Tetapkan jalur skema:

SET SCHEMA PATH a,b,c

sepertinya hanya berfungsi untuk satu sesi kueri di mac, setelah saya menutup jendela kueri variabel path menetapkan kembali ke default.

Bagaimana saya bisa membuatnya permanen?

Nakh
sumber
Saya kira SET search_path TO a, b, c; seperti yang dikatakan jawabannya dan bukan SET PATEMA a, b, c;
Armando

Jawaban:

168

(Dan jika Anda tidak memiliki akses admin ke server)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Dua hal penting yang perlu diketahui:

  1. Ketika nama skema tidak sederhana, itu perlu dibungkus dengan tanda kutip ganda.
  2. Urutan di mana Anda mengatur skema default a, b, cpenting, karena juga urutan di mana skema akan dicari tabel. Jadi jika Anda memiliki nama tabel yang sama di lebih dari satu skema di antara default, tidak akan ada ambiguitas, server akan selalu menggunakan tabel dari skema pertama yang Anda tentukan untuk Anda search_path.
Milen A. Radev
sumber
19
Juga patut dicatat untuk secara eksplisit TIDAK menggunakan tanda kutip di sekitar enumerasi a, b, c. Tangan ke dahi selama 15 menit terakhir ...
Jmoney38
4
@ Jmoney38 Tidak menggunakan tanda kutip tunggal, tetapi tanda kutip ganda diperlukan untuk nama skema yang tidak sederhana.
vitaly-t
136

Anda dapat mengatur default search_pathdi level database:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

Atau di tingkat pengguna atau peran:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

Atau jika Anda memiliki skema default umum di semua basis data Anda, Anda bisa mengatur standar seluruh sistem dalam file konfigurasi dengan opsi search_path .

Ketika sebuah database dibuat, ia dibuat secara default dari database "template" tersembunyi bernama template1 , Anda bisa mengubah database itu untuk menentukan jalur pencarian default baru untuk semua database yang dibuat di masa depan. Anda juga bisa membuat database templat lain dan gunakan CREATE DATABASE <database_name> TEMPLATE <template_name>untuk membuat basis data Anda.

Joshperry
sumber
9
bagi mereka yang bertanya-tanya dari baris perintah psql Anda dapat mendaftar skema oleh \ dn
BKSpurgeon
3
Perlu memutus sesi dan menyambungkan kembali agar pengaturan berlaku.
isapir
oh memberkati kamu datang ke PG dari SQL Server jadi ini semua baru (dan aneh) bagi saya
Nate Anderson
24

Josh benar tetapi dia meninggalkan satu variasi:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Tetapkan jalur pencarian untuk pengguna, dalam satu database tertentu.

Chris Johnson
sumber
sangat berguna juga. Terima kasih
Alejandro Teixeira Muñoz