2015-12-04 17 views
34

Tôi có cơ sở dữ liệu postgres với nhiều lược đồ. Khi tôi kết nối với cơ sở dữ liệu từ một trình bao với psql và tôi chạy \dt, nó sử dụng lược đồ kết nối mặc định là công khai. Có một lá cờ tôi có thể chỉ định hoặc làm thế nào tôi có thể thay đổi giản đồ?Làm thế nào để chọn một lược đồ trong postgres khi sử dụng psql?

+0

Xem xét: http://stackoverflow.com/questions/9067335/how-does-the-search-path-influence-identifier-resolution-and-the-current-schema/9067777#9067777 –

Trả lời

17

Bạn có muốn thay đổi cơ sở dữ liệu không?

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

Cập nhật.

Tôi đã đọc lại câu hỏi của bạn. Để hiển thị schemas

\dn - list of schemas 

Để thay đổi lược đồ, bạn có thể thử

SET search_path TO 
40

Trong PostgreSQL hệ thống xác định bảng là có nghĩa là bằng cách làm theo một con đường tìm kiếm, mà là một danh sách các lược đồ để tìm trong.

Bảng so khớp đầu tiên trong đường dẫn tìm kiếm được lấy là giá trị mong muốn, nếu không có lỗi trùng khớp, ngay cả khi tên bảng phù hợp tồn tại trong các lược đồ khác trong cơ sở dữ liệu.

Để hiển thị đường dẫn tìm kiếm hiện tại bạn có thể sử dụng lệnh sau:

SHOW search_path; 

Và để đặt schema mới trong đường dẫn, bạn có thể sử dụng:

SET search_path TO myschema; 

Hoặc nếu bạn muốn nhiều schemas:

SET search_path TO myschema, public; 

tham khảo: https://www.postgresql.org/docs/current/static/ddl-schemas.html

11

Sử dụng tên lược đồ với khoảng thời gian trong lệnh psql để lấy thông tin về lược đồ này.

Setup:

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 

Hiển thị danh sách các mối quan hệ trong 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) 

Hiện test_schema.test_table định nghĩa:

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

Hiện tất cả các bảng trong 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 | 

v.v ...

+4

Tôi đã bỏ lỡ khoảng thời gian sau \ dt test_schema. mà kết quả trong "không tìm thấy thông điệp liên quan" Cảm ơn các ví dụ, làm cho nó dễ dàng hơn nhiều :) – mehany

1

Đây là cũ, nhưng tôi đưa kim ngạch xuất khẩu trong bí danh của tôi để kết nối với db:

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

Và đối với schema khác:

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

Ý tưởng hay. Tôi sẽ bỏ 'xuất' và dấu chấm phẩy trong bí danh của bạn. Bằng cách này, 'PGOPTIONS' không ở lại sau khi bạn rời khỏi psql. –

+0

@DoronGold điểm tuyệt vời, cập nhật phản hồi. Cảm ơn – techbrownbags

0

chủ chốt từ:

SET search_path TO 

ví dụ:

SET search_path TO your_schema_name; 
Các vấn đề liên quan