如何从内部在远程 postgres 服务器中执行相同的查询 "BEFORE TRIGGER"
How to execute same query in remote postgres server from inside "BEFORE TRIGGER"
我计划在插入、更新和删除触发器之前在本地服务器上执行查询时,在远程数据库服务器上执行完全相同的查询。
我的用例是这样的:
- 使用 db_link 连接到远程服务器
- 想要在本地服务器中继续之前对远程服务器执行相同的查询。
您可能会告诉我在新查询中使用 OLD 和 NEW 对象来格式化数据,但我在 UPDATE 和 DELETE 查询中遇到了一种情况,因为我们使用的是 WHERE 子句,这不一致,因为我们使用的是哪个列将要执行的操作未知,例如
DELETE FROM my_table WHERE col1 = 'possibility1' OR col2 = 'possibility2'
还有另一种可能性
DELETE FROM my_table WHERE col1 = 'possibility1' AND col3 = 'possibility2'
现在的问题是如何在触发器中访问这个完整的查询 运行 在远程服务器上也是如此
想出了这个问题的解决方案。我在触发器内部使用 current_query()
来获取导致触发器调用的确切查询字符串。
例如
RAISE NOTICE 'my exact query statement: %', current_query();
我计划在插入、更新和删除触发器之前在本地服务器上执行查询时,在远程数据库服务器上执行完全相同的查询。
我的用例是这样的:
- 使用 db_link 连接到远程服务器
- 想要在本地服务器中继续之前对远程服务器执行相同的查询。
您可能会告诉我在新查询中使用 OLD 和 NEW 对象来格式化数据,但我在 UPDATE 和 DELETE 查询中遇到了一种情况,因为我们使用的是 WHERE 子句,这不一致,因为我们使用的是哪个列将要执行的操作未知,例如
DELETE FROM my_table WHERE col1 = 'possibility1' OR col2 = 'possibility2'
还有另一种可能性
DELETE FROM my_table WHERE col1 = 'possibility1' AND col3 = 'possibility2'
现在的问题是如何在触发器中访问这个完整的查询 运行 在远程服务器上也是如此
想出了这个问题的解决方案。我在触发器内部使用 current_query()
来获取导致触发器调用的确切查询字符串。
例如
RAISE NOTICE 'my exact query statement: %', current_query();