2010-05-20 31 views
79

Tôi cần đặt đường dẫn lược đồ trong Postgres để tôi không phải mỗi lần chỉ định bảng lược đồ lược đồ, ví dụ: schema2.table. Set đường schema:Vĩnh viễn đặt Đường dẫn Lược đồ Postgresql

SET SCHEMA PATH a,b,c 

dường như chỉ để làm việc cho một phiên truy vấn trên mac, sau khi tôi đóng cửa sổ truy vấn con đường bộ biến bản thân trở lại để mặc định.

Làm cách nào để có thể đặt giá trị vĩnh viễn?

Trả lời

103

(Và nếu bạn không có quyền truy cập admin đến máy chủ)

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

Cũng đáng chú ý là KHÔNG sử dụng dấu ngoặc kép xung quanh a, b, c liệt kê. Tay-to-trán trong 15 phút qua ... – Jmoney38

77

Bạn có thể thiết lập mặc định search_path ở cấp cơ sở dữ liệu:

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

Hoặc ít người dùng hoặc vai trò cấp:

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

Hoặc nếu bạn có lược đồ mặc định chung trong tất cả các cơ sở dữ liệu, bạn có thể đặt mặc định toàn hệ thống trong tệp cấu hình có tùy chọn search_path.

Khi một cơ sở dữ liệu được tạo ra nó được tạo ra theo mặc định từ một ẩn "mẫu" cơ sở dữ liệu tên template1, bạn có thể thay đổi cơ sở dữ liệu để xác định một đường dẫn tìm kiếm mặc định mới cho tất cả các cơ sở dữ liệu được tạo ra trong tương lai. Bạn cũng có thể tạo một cơ sở dữ liệu mẫu khác và sử dụng CREATE DATABASE <database_name> TEMPLATE <template_name> để tạo cơ sở dữ liệu của bạn.

+4

cho những người tự hỏi từ dòng lệnh psql bạn có thể liệt kê các lược đồ bằng \ dn – BKSpurgeon

+1

Cần ngắt kết nối phiên và kết nối lại để các cài đặt có hiệu lực. – isapir

3

Josh là đúng nhưng ông bỏ qua một sự thay đổi:

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

Đặt đường dẫn tìm kiếm cho người dùng, trong một cơ sở dữ liệu cụ thể.

Các vấn đề liên quan