Postgresql
如何使用 pgadmin 或其他方法將多個 CSV 文件導入 postgres 表?
我希望使用 pgadmin 將一個包含 100 多個 csv 文件的文件夾導入 PostgreSQL 上的一個表中。我有以下腳本,但有沒有辦法將文件路徑更改為所有 csv?
複製 schema.table FROM ‘C:\Documents\Data’ DELIMITER ‘,’ CSV HEADER;
- 使用電腦的命令行環境列出目錄中所有文件的名稱
- 使用文件列表創建您想要的命令
- 有些人為此使用excel
- 我更喜歡 VSCode 之類的多行編輯
- 逐行手動調整命令或更改您在步驟 2 中使用的公式/過程,直到獲得所需的輸出。
升;高頻;)
彼得的答案可能是要走的路,但想加入另一種使用
COPY FROM PROGRAM
. 不幸的是,我只有一個 linux 環境,所以我不能給你一個適用於你的情況的命令/語句,但希望這能給你這個想法和/或對其他人有用。
COPY FROM
with 一個文件一次只能支持一個文件,但是稍微聰明一點 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 沒有指定,則使用表的列順序。