PostgreSQL 9.5:在文本文件中跳过前两行

时间:2017-02-15 06:32:18

标签: postgresql

我要使用以下格式导入文本文件:

columA    | columnB    |    columnC
-----------------------------------------
1     |     A          |    XYZ
2     |     B          |    XZ
3     |     C          |    YZ

我可以使用以下方式跳过第一行:

WITH CSV HEADER; 

在复制命令中,但在跳过第二行时卡住了。

2 个答案:

答案 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}}功能。如果必须导入具有相同问题的许多文件,还可以通过在导入表上使用后插入触发器来自动执行整个过程。