#postgresql
#postgresql
Вопрос:
Можно ли переопределить системную функцию Postgres с помощью пользовательской функции?
Я создал определяемую пользователем функцию «substr», но она работает только в том случае, если я укажу имя схемы, иначе она использует системную функцию «substr».
Есть ли способ переопределить системную функцию «substr» и использовать мою определяемую пользователем функцию «substr» без необходимости использовать имя схемы?
Причина в том, что я хочу использовать ту же функциональность Oracle substr в PG для существующей базы кода.
Ответ №1:
Да, вы можете это сделать, но вы должны настроить search_path
его так, чтобы он явно содержался pg_catalog
после схемы с вашей функцией:
SET search_path = myfuncs, pg_catalog;
Обратите внимание, что это search_path
может быть изменено всеми, поэтому ваше решение зависит от того, чтобы никто не изменял параметр. Кроме того, функции могут быть определены с помощью пользовательской search_path
настройки , которая переопределит ваши настройки.
Это может привести к неожиданностям в сочетании с восстановлением a pg_dump
, которое заставляет search_path
пустовать. Я думаю, что ваша идея не очень надежна, и было бы лучше назвать схему явно.