[英]PSQL - Copy from csv file if column item does not exist
我正在嘗試將csv文件導入postgres表,我可以使用COPY FROM成功執行此操作:
import.sql
\copy myTable FROM '..\CSV_OUTPUT.csv' DELIMITER ',' CSV HEADER;
但是,如果當前不在數據庫中,則該查詢僅添加行,否則將退出並顯示錯誤。 密鑰(id)=(#)已經存在。
為myTable
id | alias | address
------+-------------+---------------
11 | red_foo | 10.1.1.11
12 | blue_foo | 10.1.1.12
CSV_OUTPUT.csv
id | alias | address
------+-------------+---------------
10 | black_foo | 10.1.1.11
12 | blue_foo | 10.1.1.12
13 | grey_foo | 10.1.1.13
14 | pink_foo | 10.1.1.14
我想要的輸出是將csv文件中的行插入postgresql(如果地址不存在)。 myTable應該包含grey_foo和pink_foo但不包含black_foo,因為它的地址已經存在。
為實現這一目標,應該使用哪些正確的查詢? 非常感謝您的建議和想法。
首先將數據復制到臨時表中,然后僅使用具有尚不存在的鍵的行更新主表( myTable
)。 例如,假設您已將數據導入名為staging
的表中:
with nw as (
select s.id, s.alias, s.address
from staging as s
left join mytable as m on m.address=s.address
where m.address is null
)
insert into mytable
(id, alias, address)
select id, alias, address
from nw;
如果可以升級到Postgres 9.5,則可以使用帶有ON CONFLICT DO NOTHING
子句的INSERT
命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.