[英]how import csv file into Postgres with empty values?
我正在嘗試將一個csv文件導入確實包含年齡值的Postgres,但是也有一些空值,因為並非所有年齡都已知。 我想將這些列導入為真實列,因為這些列包含帶有小數的年齡,例如98.45。 年齡未知的人的空值顯然被視為字符串,但是我仍然想將年齡值導入為數字。 所以我想知道如何導入真實值,即使csv中的某些單元格為空,因此根據Postgres也將其視為字符串值。
為了進行創建,我使用了以下代碼,因為我正在處理十進制值。
Create table psychosocial.age (
respnr integer Primary key,
fage real,
gage real,
hage real);
導入csv文件后,出現以下錯誤
ERROR: invalid input syntax for integer: "11455, , , "
CONTEXT: COPY age, line 2, column respnr: "11455, , , "
一個問題是您試圖將空格導入數字字段。 因此,首先必須在導入之前對csv文件進行預處理。
以下是使用awk
解決問題的示例。 從控制台執行以下命令:
$ cat file.csv | awk '{sub(/^ +/,""); gsub(/, /,",")}1' | psql db -c "COPY psychosocial.age FROM STDIN WITH CSV HEADER"
如果您想知道如何傳遞命令,請查看以下答案 。 這是一個有關如何使用COPY
和STDIN
的更詳細的示例 。
您還必須考慮到整數字段上的引號可能會引起問題,例如:
"11455, , , "
這將導致錯誤,因為postgres會將"11455
解析為單個值,並嘗試將其存儲在interger字段中,這顯然會失敗。相反,請格式化csv文件,如下所示:
11455, , ,
甚至
11455,,,
您也可以從控制台使用awk
實現此目的:
$ awk '{gsub(/\"/,"")};1' file.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.