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
在大多數情況下,性能應該是相似的,但是在衝突()上可能會慢一點。 – klin