我要使用以下格式导入文本文件:
columA | columnB | columnC
-----------------------------------------
1 | A | XYZ
2 | B | XZ
3 | C | YZ
我可以使用以下方式跳过第一行:
WITH CSV HEADER;
在复制命令中,但在跳过第二行时卡住了。
答案 0 :(得分:4)
如果您正在使用COPY FROM 'filename'
,则可以使用COPY FROM PROGRAM
来调用某些shell命令,该命令会从文件中删除标头并返回其余内容。
在Windows中:
COPY t FROM PROGRAM 'more +2 "C:\Path\To\File.txt"'
在Linux中:
COPY t FROM PROGRAM 'tail -n +3 /path/to/file.txt'
如果您尝试将本地文件发送到远程服务器,则可以通过psql
执行类似的操作,例如:
tail -n +3 file.txt | psql -c 'COPY t FROM STDIN'
答案 1 :(得分:0)
COPY
命令只能跳过第一行。最简单的解决方案是在导入之前手动删除第二行,但如果不可能,那么你必须使用"脏"特技。
您创建一个具有varchar
类型的单个列的表,并将该文本文件导入该表。导入后,运行PL / pgSQL函数来读取表中的所有行(显然除了标题行),并提取要插入目标表的信息,例如regexp_matches()
或{ {1}}功能。如果必须导入具有相同问题的许多文件,还可以通过在导入表上使用后插入触发器来自动执行整个过程。