PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Khi nào / như thế nào thì các hàm biểu thức giá trị mặc định bị ràng buộc liên quan đến đường dẫn tìm kiếm?

Các giá trị mặc định được phân tích cú pháp tại thời điểm tạo (liên kết sớm!). Những gì bạn thấy trong psql, pgAdmin hoặc các ứng dụng khách khác là biểu diễn văn bản nhưng trên thực tế, là OID của hàm now() tại thời điểm tạo, cột mặc định được lưu trữ trong danh mục hệ thống pg_attrdef . Tôi trích dẫn:

adbin   pg_node_tree  The internal representation of the column default value
adsrc   text          A human-readable representation of the default value

Khi bạn thay đổi search_path , điều đó khiến Postgres hiển thị tên của lược đồ hàm đủ điều kiện, vì nó sẽ không được giải quyết chính xác nữa với search_path hiện tại .

Kết xuất và khôi phục không liên quan đến search_path tùy chỉnh của bạn cài đặt. Họ thiết lập nó một cách rõ ràng. Vì vậy, những gì bạn thấy không liên quan đến chu kỳ kết xuất / khôi phục.

Ghi đè các chức năng tích hợp sẵn

Đặt public trước pg_catalog trong search_path là một trò chơi mạo hiểm . Người dùng kém quyền (bao gồm cả bạn) thường được phép viết ở đó và tạo các hàm có thể vô tình ghi đè các chức năng của hệ thống - với kết quả tùy ý (hoặc độc hại).

Bạn muốn có một lược đồ chuyên dụng với quyền truy cập hạn chế để ghi đè các chức năng tích hợp sẵn. Sử dụng một cái gì đó như thế này để thay thế:

SET search_path = override, pg_catalog, public;

Chi tiết trong câu trả lời liên quan trên dba.SE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể viết Bộ chuyển đổi kiểu dữ liệu để xử lý các cột JSON postgres không?

  2. Các thực thể liên kết DB và lập chỉ mục

  3. Postgresql CHỌN ngẫu nhiên với giá trị duy nhất

  4. Chèn Từ điển Python bằng Psycopg2

  5. Tham gia với hàm trả về thiết lập (SRF) và truy cập các cột trong SQLAlchemy