簡體   English   中英

PSQL - 如果列項不存在,則從csv文件復制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM