2016-11-19 116 views
2

我想使用on conflict do update-feature從一個表(「tmp」)插入另一個表(「tbla」)中的數據。 我的代碼:Postgres插入到衝突執行更新

INSERT INTO tbla (id, col1, col2, col3) 
SELECT id, col1, col2, col3 FROM tmp 

ON CONFLICT on constraint pkey_tbla DO UPDATE SET col1=tmp.col1 FROM tmp; 

DROP TABLE tmp; 

此代碼給我回一個語法錯誤,在「從TMP中;」 沒有FROM有錯誤:缺少表「tmp」的FROM-clause條目 關於我在做什麼錯的任何建議?

DB-服務器在本地主機上運行的Windows 7的機器在Postgres 9.5

回答

0

文檔「需要注意的是特殊的排除表格來引用最初提議插入值」 https://www.postgresql.org/docs/9.5/static/sql-insert.html

修復:... DO UPDATE SET col1=EXCLUDED.col1;

x=> select * from tbla; 
id | col1 
----+------ 
    1 | 2 
    2 | 3 
(2 rows) 

x=> truncate tmp; 
TRUNCATE TABLE 
x=> insert into tmp(id,col1) values (1,42); 
INSERT 0 1 
x=> INSERT INTO tbla(id,col1) SELECT id,col1 FROM tmp ON CONFLICT (id) DO UPDATE SET col1=EXCLUDED.col1; 
INSERT 0 1 
sh161119=> select * from tbla; 
id | col1 
----+------ 
    2 | 3 
    1 | 42 
(2 rows) 
+0

這工作完美!下次我會盡力完整閱讀和理解手冊...... –