2013-08-23 43 views
1

我有一個大的文本文件,每行有一列,我想將這個數據文件導入到Postgres中。Postgres導入文件,其中有以新行分隔的列

我有一個可用的MySQL腳本。

LOAD DATA LOCAL 
     INFILE '/Users/Farmor/data.sql' 
     INTO TABLE tablename 
     COLUMNS TERMINATED BY '\n'; 

我該如何翻譯成Postgres?我嘗試過其他命令。

COPY tablename 
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER '\n' 

但是它抱怨:

ERROR: COPY delimiter must be a single one-byte character

+0

''\ n''是一個兩個字符的字符串(取決於字符串設置和PostgreSQL版本),你想說'E'\ n'來得到換行符。但是這可能會讓你得到一個「COPY分隔符不能換行或回車」的錯誤,因爲如果PostgreSQL使用相同的分隔符,PostgreSQL將無法區分列和行之間的區別。我猜你必須將數據文件轉換爲其他佈局(甚至可能將其加載到MySQL中,然後將其從SQL中或CSV轉儲)。 –

+0

你是對的。我會採取轉儲方式或寫一個perl腳本。奇怪的是,Postgres無法弄清楚,一個10列的表格會每隔10行有一個新行。讓你的評論成爲答案,這樣我就可以接受它。 – Farmor

+0

任何指針,建議https://stackoverflow.com/questions/45414536/multiple-column-copy-format-postgresql-node-js –

回答

1

你的分隔符是兩個字符所以這是一個有效的錯誤消息。

我相信最簡單的方法是修改您正在導入的文件,實際上將分隔符更改爲\n以外的其他名稱,但這可能不適用於您的情況。

這個問題解決了同一個問題: ERROR: COPY delimiter must be a single one-byte character

2

眼前的錯誤是因爲\n只是一個兩個char字符串,\n

你想:

COPY tablename 
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER E'\n' 

E''語法是PostgreSQL擴展。

雖然它仍然不起作用,因爲PostgreSQL的COPY不能理解帶有換行符分隔符的文件。我從來沒有見過這種格式。

您需要使用其他工具加載它並轉換CSV。使用辦公套件,用於Python的csv模塊,用於Perl的Text::CSV,或其他。然後將清理好的CSV文件輸入到PostgreSQL中。

+0

複製語句拋出一個錯誤:COPY分隔符不能換行或回車 – user637338

+0

@ user637338庵,是的。閱讀完整的答案。 –

+0

任何建議https://stackoverflow.com/questions/45414536/multiple-column-copy-format-postgresql-node-js –

1

雖然postgresql不能識別\ n作爲字段分隔符,但原始問題是如何將一行作爲單個列導入,並且這可以通過在數據字符串中找不到的定界符在postgresql中完成。例如:

COPY tablename 
FROM '/Users/Farmor/data.sql' 
WITH DELIMITER '~'; 

如果沒有〜是行中發現,PostgreSQL將處理整個行作爲一列。

+0

https://stackoverflow.com/questions/45414536/multiple-column-copy-format-postgresql -node-JS –

相關問題