Установите схему для объектов, на которые ссылаются функции postgres, такими же, как сама функция - PullRequest
0 голосов
/ 19 сентября 2018

В своих функциях postgres я использую полное имя (например, schemaname.tablename) для объектов внутри него, таких как таблицы и другие функции.

Но почти во всех случаях я имею в виду объекты, которыев той же схеме, что и схема самой функции.Как я могу сообщить, что функция postgres по умолчанию использует ту же схему, что и для объектов в ней?

Таким образом, я мог бы получить schema_a.myfunction, который ссылается на mytable, но эторазрешить до schema_a.mytable и schema_b.myfunction, что также относится к mytable, но разрешится до schema_b.mytable.

Как я могу настроить все таким образом?Это действительно упростит задачу, упростив рефакторинг и переименование схем.У меня одно и то же имя таблицы во многих схемах, поэтому мне, к сожалению, приходится использовать полные имена во всех функциях.

Это означает, что если я изменяю что-то вроде имени схемы, мне нужно переименовать все вхождения schema_a.schema_new. во всех функциях postgres.Мне интересно, есть ли лучший способ, потому что иногда это может привести к ошибкам (я могу пропустить замену или заменить что-то, чего у меня не должно быть).

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете установить правильное значение search_path при создании функции и использовании

CREATE FUNCTION ...
SET search_path FROM CURRENT

. Чтобы это работало, используйте SET, чтобы установить search_path на нужную схему перед вы запускаете оператор CREATE FUNCTION.

Тогда search_path будет действовать в течение всей функции.

...