在 PostgreSQL 中导入带分隔符制表的 CSV 数据

Import CSV data with delimiter tabulation in PostgreSQL

我有一个 csv 文件,其中包含类似“44444 521 hello”的数据。 这里的 Scapes 是 "Tabulations".

我想在名为 "TEST1" 的 table 中导入 csv 数据,所以我这样做了:

\copy TEST(attribut1,attribut2,attribut3) FROM '/mnt/c/Users/user1/Desktop/data/test1.csv' WITH DELIMITER E'\t' CSV HEADER;

attribut1 = 整数。属性 2 = 整数。 attribut3 = varchar(20).

它说:

ERROR: invalid input syntax for integer: "44444 521 hello" CONTEXT: COPY test1, line 2, column attribut1: "4444444 521 hello"

感谢您的宝贵时间。

编辑

这是十六进制编辑器中文件的屏幕截图:

出现问题是因为您指定了 CSV,这会激活 postgres 的 csv 导入规则。您的文件未被视为制表符分隔;它在每一行的开头和结尾都有 " 个引号,在 CSV 模式下表示 "start of data"/"end of data",因此每一行都被视为一个字段,其中的选项卡被视为数据, 不是定界符

以文本模式导入(不指定 CSV)或以 CSV 模式导入但指定不同的引号字符(文件中不存在的字符,1)以停止 " 被视为引号和 2) 因此没有其他字符可以被视为引号)

在任何一种情况下,您都必须从 post 过程中删除引号 " 个字符 - 我认为您无法在复制数据时即时操作数据,因此您'我必须首先将它加载到暂存 table 中,(所有 varchar)然后去除引号并将其加载到您的真实 table (REPLACE(data, '"', '')::int)

或者,您可以对文件进行文本编辑,并在将其提供给 postgres

之前从中删除 " 个字符