Đặt đường dẫn lược đồ Postgresql vĩnh viễn


135

Tôi cần đặt đường dẫn lược đồ trong Postgres để mỗi lần tôi không chỉ định bảng chấm lược đồ schema2.table. Đặt đường dẫn lược đồ:

SET SCHEMA PATH a,b,c

dường như chỉ hoạt động cho một phiên truy vấn trên mac, sau khi tôi đóng cửa sổ truy vấn, biến đường dẫn sẽ tự trở về mặc định.

Làm thế nào tôi có thể làm cho nó vĩnh viễn?


Tôi nghĩ là SET search_path TO a, b, c; như câu trả lời nói và không TẠO SCHema PATH a, b, c;
Armando

Câu trả lời:


168

(Và nếu bạn không có quyền truy cập quản trị viên vào máy chủ)

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

Hai điều quan trọng cần biết về:

  1. Khi một tên lược đồ không đơn giản, nó cần được bọc trong dấu ngoặc kép.
  2. Thứ tự mà bạn đặt các lược đồ mặc định là a, b, cvấn đề, vì đó cũng là thứ tự mà các lược đồ sẽ được tìm kiếm cho các bảng. Vì vậy, nếu bạn có cùng tên bảng trong nhiều lược đồ trong số các mặc định, sẽ không có sự mơ hồ, máy chủ sẽ luôn sử dụng bảng từ lược đồ đầu tiên bạn chỉ định cho search_path.

19
Cũng đáng lưu ý để rõ ràng KHÔNG sử dụng dấu ngoặc kép quanh bảng liệt kê a, b, c. Tay ngang trán trong 15 phút qua ...
Jmoney38

4
@ Jmoney38 Không sử dụng dấu ngoặc đơn, nhưng dấu ngoặc kép là bắt buộc đối với tên lược đồ không đơn giản.
Vitaly-t

136

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

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

Hoặc ở cấp độ người dùng hoặc vai trò:

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

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

Khi cơ sở dữ liệu được tạo, nó được tạo theo mặc định từ cơ sở dữ liệu "mẫu" ẩn có tên template1 , bạn có thể thay đổi cơ sở dữ liệu đó để chỉ định đườ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 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 mình.


9
đối với những người thắc mắc từ dòng lệnh psql, bạn có thể liệt kê các lược đồ theo \ dn
BKSpurgeon

3
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

oh chúc lành cho bạn đã đến với PG từ SQL Server, vì vậy đây là điều hoàn toàn mới (và lạ) đối với tôi
Nate Anderson

24

Josh đúng nhưng anh ta bỏ qua một biến thể:

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ũng rất hữu ích Cảm ơn
Alejandro Teixeira Muñoz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.