2017-04-26 75 views
0

我的用例如下:我的數據來自csv文件,我需要將它加載到一個表格中(迄今爲止這麼好,沒有新的東西)。可能會發生相同的數據與更新的列一起發送,在這種情況下,如果重複,我想嘗試插入和替換。是否可以使用pgloader插入和替換行?

所以我的表如下:

CREATE TABLE codes (
    code   TEXT NOT NULL, 
    position_x  INT, 
    position_y  INT 
    PRIMARY KEY (code) 
); 

和傳入的CSV文件是這樣的:

TEST01,1,1 
TEST02,1,2 
TEST0131,3 
TEST04,1,4 

它可能在未來我與另一個csv文件的某個時候發生:

TEST01,1,1000 <<<<< updated value 
TEST05,1,5 
TEST0631,6 
TEST07,1,7 

現在正在發生的事情是當我跑第一個文件時,一切都很好,但是當我e xecute對於第二個我得到一個錯誤:

pgloader csv.load 

而且我csv.load文件看起來像這樣:

LOAD CSV 
    FROM 'codes.csv' (code, position_x, position_y) 
    INTO postgresql://localhost:5432/codes?tablename=codes (code, position_x, position_y) 

    WITH fields optionally enclosed by '"', 
      fields terminated by ','; 

是什麼

2017-04-26T10:33:51.306000+01:00 ERROR Database error 23505: duplicate key value violates unique constraint "codes_pkey" 
DETAIL: Key (code)=(TEST01) already exists. 

我使用加載數據我試圖用pgloader做到這一點嗎?

我也嘗試刪除主鍵的約束,但最終我在表中有重複的條目。

非常感謝您的幫助。

回答

1

不,你不能。按照reference

To work around that (load exceptions, eg PK violations), pgloader cuts the data into batches of 25000 rows each, so that when a problem occurs it's only impacting that many rows of data.

括號

- 我的...

你能做的最好的是負載CSV與相同結構表,然後用查詢的幫助(EXCEPTOUTER JOIN ... where null等)的數據合併

+0

Thx爲您的答案!以下是作者提供的一些額外信息,以及在問題中解釋的實現所需結果的替代方法 - https://github.com/dimitri/pgloader/issues/540#issuecomment-297372388 – ktulinho

相關問題