所以I'm相當新的PostgreSQL和開始通過與Postgres9.6 pgadmin4檢驗出來的一些東西與它的工作。導入CSV於Postgres:更新和插入的同時
問題:
我有一個表:試驗(ID,文本)
在此表中我有10行數據。 現在我想導入一個有12行的CSV來更新測試表。一些文字爲前10行更改,我想從CSV中插入2個附加行。
我知道,你可以從表中刪掉所有的數據和剛剛從CSV重新導入萬能的,但沒有that's一個很好的辦法做到這一點。我想更新我的現有數據&用一個查詢插入新數據。
我已經發現了應使用臨時表解決了這個功能。這更新現有的行是正確的,但2個額外的行不會被插入
CREATE OR REPLACE FUNCTION upsert_test(integer,varchar) RETURNS VOID AS $$
DECLARE
BEGIN
UPDATE test
SET id = tmp_table.id,
text = tmp_table.text
FROM tmp_table
WHERE test.id = tmp_table.id;
IF NOT FOUND THEN
INSERT INTO test(id,text) values
(tmp_table.id,tmp_table.text);
END IF;
END;
$$ Language 'plpgsql';
DO $$ BEGIN
PERFORM upsert_test(id,text) FROM test;
END $$;
那麼我需要改變以獲得插入的工作?
無關,而是:語言名稱是一個標識符。不要把它放在單引號使用:'語言plpgsql' –