Bagaimana cara memilih skema di postgres saat menggunakan psql?

151

Saya memiliki database postgres dengan banyak skema. Ketika saya terhubung ke database dari shell dengan psqldan saya menjalankannya \dtmenggunakan skema koneksi default yang bersifat publik . Apakah ada flag yang bisa saya tentukan atau bagaimana saya bisa mengubah skema?

mehany
sumber
1
Pertimbangkan: stackoverflow.com/questions/9067335/…
Erwin Brandstetter

Jawaban:

197

Dalam PostgreSQL sistem menentukan tabel mana yang dimaksud dengan mengikuti jalur pencarian, yang merupakan daftar skema yang harus dicari.

Tabel pencocokan pertama di jalur pencarian dianggap sebagai yang diinginkan, jika tidak, jika tidak ada kecocokan, kesalahan akan muncul, bahkan jika nama tabel yang cocok ada di skema lain dalam database.

Untuk menunjukkan jalur pencarian saat ini Anda dapat menggunakan perintah berikut:

SHOW search_path;

Dan untuk meletakkan skema baru di jalur, Anda dapat menggunakan:

SET search_path TO myschema;

Atau jika Anda ingin beberapa skema:

SET search_path TO myschema, public;

Referensi: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Ciro Pedrini
sumber
77

Apakah Anda ingin mengubah basis data?

\l - to display databases
\c - connect to new database

Memperbarui.

Saya sudah membaca lagi pertanyaan Anda. Untuk menampilkan skema

\dn - list of schemas

Untuk mengubah skema, Anda dapat mencoba

SET search_path TO
miholeus
sumber
1
Bagaimana melakukan ini tidak dalam psql. cara "terhubung"
mathtick
46
\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.
Mohamed Sameer
sumber
17
Jangan seperti saya lupa tentang periode setelah nama skema :) (terima kasih, Mohamed!)
anapaulagomes
1
Ini tidak menjawab pertanyaan. Dia bertanya bagaimana mengubah skema default. Bukan perintah dasar untuk psql.
Kenny Steegmans
27

Gunakan nama skema dengan titik dalam perintah psql untuk mendapatkan informasi tentang skema ini.

Mempersiapkan:

test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE

Tampilkan daftar relasi di test_schema:

test=# \dt test_schema.
               List of relations
   Schema    |     Name     | Type  |  Owner   
-------------+--------------+-------+----------
 test_schema | test_table   | table | postgres
 test_schema | test_table_2 | table | postgres
(2 rows)

Perlihatkan test_schema.test_tabledefinisi:

test=# \d test_schema.test_table
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Tampilkan semua tabel di test_schema:

test=# \d test_schema.
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Table "test_schema.test_table_2"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

dll ...

klin
sumber
6
Saya melewatkan periode setelah test_schema. yang menghasilkan "tidak ada hubungan pesan yang ditemukan" Terima kasih atas contohnya, membuatnya lebih mudah :)
mehany
14

Ini sudah tua, tapi saya memasukkan ekspor ke alias saya untuk menghubungkan ke db:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"

Dan untuk skema lain:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"
kantong techbrown
sumber
2
Ide bagus. Saya akan menghilangkan exportdan titik koma di alias Anda. Cara PGOPTIONSini tidak tinggal setelah Anda meninggalkan psql.
Doron Gold
ini adalah ide yang bagus, jauh lebih praktis daripada menambahkan SET search_pathsetiap permintaan. Terima kasih!
hraban
6

kata kunci:

SET search_path TO

contoh:

SET search_path TO your_schema_name;
appsdownload
sumber
4

solusi cepat dapat:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";
Stanislav
sumber
0

jika bermain dengan psql di dalam docker exec seperti ini:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name
andilab
sumber