【发布时间】:2015-02-20 04:19:05
【问题描述】:
我有一个 CSV 文件,我正在尝试使用 COPY FROM 命令将其加载到 PostgreSQL 9.2.4 数据库中。特别是有一个时间戳字段允许为空,但是当我加载“空值”(实际上只是"")时,我收到以下错误:
ERROR: invalid input syntax for type timestamp with time zone: ""
一个示例 CSV 文件如下所示:
id,name,joined
1,"bob","2013-10-02 15:27:44-05"
2,"jane",""
SQL 如下所示:
CREATE TABLE "users"
(
"id" BIGSERIAL NOT NULL PRIMARY KEY,
"name" VARCHAR(255),
"joined" TIMESTAMP WITH TIME ZONE,
);
COPY "users" ("id", "name", "joined")
FROM '/path/to/data.csv'
WITH (
ENCODING 'utf-8',
HEADER 1,
FORMAT 'csv'
);
根据documentation,空值应该用一个不能包含引号字符的空字符串来表示,在这种情况下是双引号("):
空
指定表示空值的字符串。默认为文本格式的 \N(反斜杠-N),以及 CSV 格式的不带引号的空字符串。在您不想区分空字符串和空字符串的情况下,您可能更喜欢使用文本格式的空字符串。使用二进制格式时不允许使用此选项。
注意:在使用 COPY FROM 时,任何与此字符串匹配的数据项都将存储为空值,因此您应确保使用与 COPY TO 相同的字符串。
我尝试了NULL '' 选项,但这似乎没有任何影响。请给点建议!
【问题讨论】:
-
一如既往地,请提供您的 Postgres 版本。
-
嗯,9.2.4 在我的本地机器上。如果我使用的是 9.4,你认为
FORCE_NULL会起作用吗? -
没错。表明在此类问题中声明您的 Postgres 版本总是很重要。
标签: postgresql csv