ฉันมีฐานข้อมูล postgres ที่มีหลายสกีมา เมื่อฉันเชื่อมต่อกับฐานข้อมูลจากเปลือกที่มีpsql
และผมทำงาน\dt
จะใช้คีมาเชื่อมต่อเริ่มต้นซึ่งเป็นที่สาธารณะ มีการตั้งค่าสถานะที่ฉันสามารถระบุหรือฉันจะเปลี่ยน schema ได้อย่างไร
ฉันมีฐานข้อมูล postgres ที่มีหลายสกีมา เมื่อฉันเชื่อมต่อกับฐานข้อมูลจากเปลือกที่มีpsql
และผมทำงาน\dt
จะใช้คีมาเชื่อมต่อเริ่มต้นซึ่งเป็นที่สาธารณะ มีการตั้งค่าสถานะที่ฉันสามารถระบุหรือฉันจะเปลี่ยน schema ได้อย่างไร
คำตอบ:
ใน PostgreSQL ระบบจะกำหนดว่าตารางใดมีความหมายโดยทำตามเส้นทางการค้นหาซึ่งเป็นรายการของ schema ที่ต้องการค้นหา
ตารางการจับคู่แรกในเส้นทางการค้นหาจะถูกนำมาเป็นตารางที่ต้องการมิฉะนั้นหากไม่มีข้อผิดพลาดเกิดขึ้นแม้ว่าชื่อตารางที่ตรงกันจะมีอยู่ในสคีมาอื่น ๆ ในฐานข้อมูล
เพื่อแสดงเส้นทางการค้นหาปัจจุบันคุณสามารถใช้คำสั่งต่อไปนี้:
SHOW search_path;
และเมื่อต้องการใส่ schema ใหม่ในเส้นทางคุณสามารถใช้:
SET search_path TO myschema;
หรือถ้าคุณต้องการสกีมาหลายรายการ:
SET search_path TO myschema, public;
การอ้างอิง: https://www.postgresql.org/docs/current/static/ddl-schemas.html
คุณต้องการเปลี่ยนฐานข้อมูลหรือไม่?
\l - to display databases
\c - connect to new database
ปรับปรุง
ฉันได้อ่านคำถามของคุณอีกครั้ง เพื่อแสดงสกีมา
\dn - list of schemas
หากต้องการเปลี่ยนสคีมาคุณสามารถลอง
SET search_path TO
\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'.
ใช้ชื่อสกีมาพร้อมกับจุดในคำสั่ง psql เพื่อรับข้อมูลเกี่ยวกับสคีมานี้
ติดตั้ง:
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
แสดงรายการความสัมพันธ์ใน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)
แสดงtest_schema.test_table
คำจำกัดความ:
test=# \d test_schema.test_table
Table "test_schema.test_table"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
แสดงตารางทั้งหมดใน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 |
ฯลฯ ...
นี่เป็นรุ่นเก่า แต่ฉันใช้การส่งออกในนามแฝงเพื่อเชื่อมต่อกับฐานข้อมูล:
alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"
และสำหรับสคีอื่น:
alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"
export
และอัฒภาคในนามแฝงของคุณ วิธีนี้PGOPTIONS
จะไม่อยู่ต่อหลังจากที่คุณออกจาก psql
SET search_path
ค้นหาทุกข้อ ขอบคุณ!
คำสำคัญ :
SET search_path TO
ตัวอย่าง:
SET search_path TO your_schema_name;
ทางออกที่รวดเร็วอาจเป็น:
SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";
ถ้าเล่นกับ psql ข้างใน docker exec มันเป็นแบบนี้:
docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name