Функция системы переопределения Postgres

#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 пустовать. Я думаю, что ваша идея не очень надежна, и было бы лучше назвать схему явно.