是否可以使用用户定义的函数覆盖 Postgres 系统函数?
我创建了一个用户定义函数“substr”,但它仅在我指定架构名称时才有效,否则它使用系统函数“substr”。
有没有办法覆盖系统函数“substr”并使用我的用户定义函数“substr”而无需使用架构名称?
原因是我希望现有代码库具有与 PG 中的 Oracle substr 相同的功能。
最佳答案
是的,您可以这样做,但您必须配置search_path
,以便它在您的函数的架构之后显式包含pg_catalog
:
SET search_path = myfuncs, pg_catalog;
请注意,每个人都可以更改 search_path
,因此您的解决方案依赖于无人更改参数。此外,可以使用自定义 search_path
定义函数,这将覆盖您的设置。
这可能会导致与恢复 pg_dump
相结合的意外情况,这会强制 search_path
为空。我认为你的想法不是很稳健,最好明确地命名架构。
关于postgresql - Postgres 覆盖系统函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70196519/