簡體   English   中英

Postgres-導入帶雙引號的數據

[英]Postgres - import data with double quote

我從csv文件導入制表符分隔的數據時遇到問題,因為數據中出現了雙引號,例如:

→語音“郵件→

我正在使用pgadmin III中的import選項導入數據。 我將制表符指定為定界符,並嘗試使用選項QUOTE和/或ESCAPE。 這些都不起作用。 我知道這是雙引號的問題,因為我從文件中將其刪除並成功導入。 我也知道這個問題已經引起了( 可以用CSV格式在Postgres COPY命令中關閉報價處理嗎? ),但是我不能使用COPY <tablename> FROM <filename>因為我正在將數據導入到遠程DB和我的PC上文件的相對路徑不被接受。 我想避免修改輸入文件,因為它可能很大。

如果要保留雙引號,請將QUOTE設置為其他值(我將使用數據文件中不存在的字符)。

示例:(在PostgreSQL 9.6上測試)

創建測試表

CREATE TABLE dialogue (person TEXT, dialogue TEXT);

使用以下示例數據創建一個測試數據文件(制表符分隔)。

# dialogue.txt
jim I ran into your ex. He says "hi"
rachel  did he now? well tell him i said "don't call me"

在psql中執行以下命令

\copy dialogue FROM '/path/to/dialogue.txt' WITH CSV QUOTE '$' DELIMITER E'\t';

示例輸出:

etl_db=# \copy dialogue from '~/Desktop/dialogue.txt' WITH CSV DELIMITER E'\t' QUOTE '$';
COPY 2
etl_db=# select * from dialogue;
 person |                     dialogue
--------+--------------------------------------------------
 jim    | I ran into your ex. He says "hi"
 rachel | did he now? well tell him i said "don't call me"
(2 rows)

我正在將數據導入遠程數據庫,並且我的PC上文件的相對路徑不被接受。 我想避免修改輸入文件,因為它可能很大。

將psql命令行客戶端用於postgresql。 它支持\\copy meta命令,該命令包裝了sql命令COPY並允許您將記錄從本地計算機流式傳輸到服務器。

我試過了'|' 作為QUOTE,因為我的數據有很多特殊字符,例如:%$ ^&*#我收到此錯誤:錯誤:編碼為“ WIN1252”的字節序列為0x8f的字符在編碼UTF8中沒有等效字符。 我的系統語言環境是:波蘭語(波蘭)

COPY命令具有一個ENCODING選項。 您可以使用它來指定文件以utf8或其他編碼進行編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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