我已经将一个数据库从Oracle迁移到RDS Postgres。我在Oracle中使用了pragma autonomous_transaction
来记录错误,在出现错误时会进行回滚。由于Postgres中没有直接选项,我一直使用dblink
进行独立提交。
我创建了一个函数,dblink将在我的测试环境中的另一个会话中使用DML执行用户定义的函数。下面将介绍通过dblink连接的部分功能。
Perform * from dblink(connection_string, query_function_call) as p (ret boolean);
现在在Dev环境中,我通过Postgres数据库中的管道部署了这个函数,然后安装了dblink扩展。但函数执行时抛出'dblink does not exist'
错误。我通过重新部署函数解决了这个问题,它运行得很好。
但几天后,我突然开始出现'dblink does not exist'
错误,这一次即使在重新部署功能后,我也会出现同样的错误。
扩展可以在pg_extension
表中看到,重新启动了实例,但仍然存在相同的问题。
我还使用dblink_connect
函数进行了检查,以测试连接,该连接也返回'dblink does not exist'
错误。重新启动数据库实例也没有帮助。
有人能帮助解释为什么会出现这个问题吗?我从基础设施团队那里听说dblink在Postgres中不是一个好的实践。非常感谢您的帮助。
很可能您更改了search_path
,因此只能通过包含模式名称来访问dblink
。