0
これは私のクエリがどのように見えるかである -postgresでdblinkを使ってこのようなクエリを書くにはどうすればいいですか?
INSERT INTO localdb_image select * from
dblink('host=10.1.1.1
user=user
password=password
dbname=oat', 'SELECT e.* FROM image e JOIN archived f ON e.image_id=f.image_id AND e.dd=f.dd') tt(
id int ,
drive_id character varying(255) ,
) ;
私は再びこのクエリを実行しますが、行がすでに存在するかどうかを確認し、何も挿入しないことができるようにしたいです。これにより、このクエリーを再度実行すると、すでに存在する主キーのエラーが発生しなくなります。
ここで、上記のクエリにこのようなものを追加できますか?
WHERE NOT EXISTS (SELECT 1 from localdb_image ei where ei.id = e.id)
私がやって考えることができる唯一のことは、単に次のようにマテリアライズド・ビューを作成します
create materialized view mv_localdb_image as select * from
dblink('host=10.1.1.1
user=user
password=password
dbname=oat', 'SELECT e.* FROM image e JOIN archived f ON e.image_id=f.image_id AND e.dd=f.dd') tt(
id int ,
drive_id character varying(255) ,
) ;
そして、定期的にこれを更新します。
そして、次のようlocaldbに挿入します。
insert into localdb_image select * from mv_localdb_image mv where not exists (
select 1 from localdb_image ii where ii.id=mv.id)
誰でも我々は、マテリアライズド・ビューを作成し、私は上記に書いた最初のクエリを編集することなく、直接これを達成する方法を知っていますか?
競合(id)は存在しない場合よりも速くですか? – Tisha
ほとんどの場合、パフォーマンスは似ているはずですが、 'on conflict()'は少し遅いかもしれません。 – klin