Първо, трябва да промените relocatable
до false
в контролния файл на разширението.
Освен това препоръката, която получихте, е отчасти разумна и отчасти глупост.
Трябва да дефинирате функциите си по следния начин:
CREATE FUNCTION .... AS
$$ /* function body */ $$
SET search_path = @[email protected];
След това search_path
е фиксиран към pg_catalog
, pg_temp
и вашата схема на разширението за продължителността на извикването на функцията. Това означава, че целият достъп до обекти без изрична схема ще търси само в тези схеми.
Тогава не е нужно да се притеснявате за изричното квалифициране на всичко във функцията с @[email protected]
, и можете да използвате оператори, без да се притеснявате, защото search_path
важи и за операторите. (Можете също така да квалифицирате по схема оператори:OPERATOR(schema.+)
, но това очевидно е болезнено и вреди на четливостта.)