簡體   English   中英

如何將csv文件導入具有空值的Postgres?

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

如果您想知道如何傳遞命令,請查看以下答案 這是一個有關如何使用COPYSTDIN的更詳細的示例

您還必須考慮到整數字段上的引號可能會引起問題,例如:

"11455, , , "

這將導致錯誤,因為postgres會將"11455解析為單個值,並嘗試將其存儲在interger字段中,這顯然會失敗。相反,請格式化csv文件,如下所示:

11455, , , 

甚至

11455,,,

您也可以從控制台使用awk實現此目的:

$ awk '{gsub(/\"/,"")};1' file.csv                    

暫無
暫無

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

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