ここで 述べた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
しかし、これを行うと、インデックスpostgres_fdw
にアクセスできないため、2〜3分続きます。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
ここでも関数の呼び出しを使用する必要がありますか? 他の回避策はありますか?