如前所述,这里 postgres_fdw
无法访问索引。
一种解决方法是在远程服务器上创建一个视图,然后在本地服务器上为该视图创建外部表包装器。
但是如果我想将参数传递给我的视图怎么办?通常我会创建一个function(myparam)
that 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
这里调用函数?还有其他解决方法吗?