Postgresql

如何使用 pgadmin 或其他方法將多個 CSV 文件導入 postgres 表?

  • August 10, 2020

我希望使用 pgadmin 將一個包含 100 多個 csv 文件的文件夾導入 PostgreSQL 上的一個表中。我有以下腳本,但有沒有辦法將文件路徑更改為所有 csv?

複製 schema.table FROM ‘C:\Documents\Data’ DELIMITER ‘,’ CSV HEADER;

  1. 使用電腦的命令行環境列出目錄中所有文件的名稱
  1. 使用文件列表創建您想要的命令
  1. 逐行手動調整命令或更改您在步驟 2 中使用的公式/過程,直到獲得所需的輸出。

升;高頻;)

彼得的答案可能是要走的路,但想加入另一種使用COPY FROM PROGRAM. 不幸的是,我只有一個 linux 環境,所以我不能給你一個適用於你的情況的命令/語句,但希望這能給你這個想法和/或對其他人有用。

COPY FROMwith 一個文件一次只能支持一個文件,但是稍微聰明一點 aCOPY FROM PROGRAM是用一個COPY. 這是一個簡單的例子:

sh-5.0$ mkdir /tmp/so_267604/
sh-5.0$ cd /tmp/so_267604/
sh-5.0$ echo -e "cola,colb\naval1,bval1\naval2,bval2" > first.csv
sh-5.0$ cat first.csv 
cola,colb
aval1,bval1
aval2,bval2
sh-5.0$ echo -e "cola,colb\naval3,bval3\naval4,bval4" > second.csv
sh-5.0$ tail --quiet -n +2 *.csv
aval1,bval1
aval2,bval2
aval3,bval3
aval4,bval4
sh-5.0$ psql -X testdb
testdb=# create table tt(cola text, colb text);
CREATE TABLE
testdb=# copy tt from program 'tail --quiet -n +2 /tmp/so_267604/*.csv' csv;
COPY 4
testdb=# select * from tt;
cola  | colb  
-------+-------
aval1 | bval1
aval2 | bval2
aval3 | bval3
aval4 | bval4
(4 rows)

請注意,複製語句中沒有HEADER修飾符;這是因為-n +2命令tail總是從它輸出的每個文件的第 2 行開始。這不應該破壞任何東西;HEADER 指令只告訴 pg 跳過讀取一行,實際數據總是使用 COPY 語句中指定的列順序導入,或者如果 COPY 沒有指定,則使用表的列順序。

引用自:https://dba.stackexchange.com/questions/267604