【发布时间】:2016-10-10 11:31:44
【问题描述】:
如前所述,here postgres_fdw 无法访问索引。
一种解决方法是在远程服务器上创建一个视图,然后在本地服务器上为该视图创建外部表包装器。
但是如果我想将参数传递给我的视图怎么办?通常我会创建一个function(myparam) 那个RETURNS TABLE()。但是如何通过postgres_fdw 调用它?
有什么办法解决这种情况(如果不需要,最好不要使用dblink)?
示例
我有这样的查询要在我的远程数据库上执行:
select count(f.id_foo)
from foo f
where f.date < _my_date
如您所见,里面有一个参数_my_date。
所以我创建了外部表 my_remote_server_public.my_remote_server_public_foo 并从本地数据库运行它:
select count(f.id_foo)
from my_remote_server_public.my_remote_server_public_foo f
where f.date < _my_date
但是当我这样做时 - 它会持续 2-3 分钟,因为 postgres_fdw 无法访问 foo 索引。
我想过在远程数据库上创建一个函数get_foo_by_date(_my_date date) 并通过本地数据库的postgres_fdw 调用它,但不知道这是否可能......
更新
假设我会将普通视图处理为内部具有恒定日期的外部表。
此视图将返回远程表中的 ID 列表。
我想从远程表中删除列出的行并将它们归档到本地表中。
当我这样称呼它时:
EXECUTE
'WITH rows_to_delete
AS (DELETE from my_remote_server_public_foo
WHERE id_foo
IN
(SELECT * FROM my_remote_server_public_view_of_rows_to_delete) RETURNING *)
INSERT INTO my_local_table
SELECT * FROM rows_to_delete';
持续 5 分钟...再次因为 DELETE 查询无法访问索引...我是否也需要在这里使用 dblink 调用函数?还有其他解决方法吗?
【问题讨论】:
-
你能举个例子说明你想做的事吗?
-
@LaurenzAlbe 问题已更新
标签: sql database postgresql foreign-data-wrapper postgres-fdw