Tham số bạn đang tìm là search_path
- liệt kê các lược đồ mà một truy vấn sẽ xem xét. Vì vậy, bạn có thể làm điều gì đó như:
CREATE TABLE schema1.tt ...
CREATE TABLE schema2.tt ...
CREATE FUNCTION schema1.foo() ...
CREATE FUNCTION schema2.foo() ...
SET search_path = schema1, something_else;
SELECT * FROM tt; -- schema1.tt
SELECT * FROM schema2.tt -- schema2.tt
SELECT foo(); -- calls schema1.foo
SELECT schema2.foo(); -- calls schema2.foo
Lưu ý rằng nếu kế hoạch của truy vấn được lưu bên trong phần thân của foo () thì bạn có thể nhận được kết quả không mong muốn. Tôi khuyên bạn nên luôn liệt kê rõ ràng các lược đồ cho các bảng được tham chiếu trong các hàm plpgsql nếu bạn đang sử dụng các bảng trùng lặp. Nếu không, hãy đảm bảo rằng bạn có thử nghiệm tại chỗ để kiểm tra hành vi với chaning search_path.
Ồ - bạn cũng có thể đặt search_path một cách rõ ràng cho nội dung của một hàm - hãy xem tài liệu tham khảo TẠO CHỨC NĂNG của sách hướng dẫn để biết thêm chi tiết.