- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CSV 文件,想通过我的数据库中的 Postgres 命令“COPY x FROM y”导入它。该数据库有两列:名为“id”的列(序列号,不允许为 NULL)和“值”列(varchar,允许为 NULL 并应用约束)。我将在下面提供测试数据库的简短创建脚本。CSV 是通过从 OpenOffice 电子表格导出得到的。 CSV 内容也在最后提供。
我的问题:
当执行下面的命令时...
COPY mytable FROM '/tmp/testdata.csv' CSV HEADER NULL AS E'\N';
...我收到此错误消息:
ERROR: value for domain car_manufacturer violates check constraint "car_manufacturer_format"
CONTEXT: COPY mytable, line 3, column value: "\N"
********** Error **********
ERROR: value for domain car_manufacturer violates check constraint "car_manufacturer_format"
SQL state: 23514
Context: COPY mytable, line 3, column value: "\N"
CSV文件内容如下(OpenOffice直接导出,应该符合标准):
"ID","value"
1,"Mercedes"
2,"\N"
显然,Postgres 在理解我的 CSV 文件中的“\N”意味着 NULL 值(本专栏中实际上是允许的)方面存在一些问题。首先,它根据约束检查整个字符串“\N”。由于它不符合约束中定义的 RegexPattern,因此会提供上述错误。我尝试了对我的 COPY-FROM-Command 的一些修改,但没有一个导致成功导入。
简而言之:我需要一个解决方案,允许 Postgres 我通过 copy-from-command 导入 csv,此外,允许在 string/varchar 中有“\N”条目表示 NULL 值的列。
我确实需要使用复制命令来执行此操作,因为我想使用脚本自动执行导入过程。使用 phpPGAdmin 导入 CSV 时一切正常。这是因为 phpPgAdmin 正在向 postgres 服务器发送 INSERT-Commands。所以它显然没有使用“复制自”命令...
附加信息:
这是数据库的创建脚本:
CREATE DOMAIN car_manufacturer AS VARCHAR (100) CONSTRAINT car_manufacturer_format CHECK
(VALUE SIMILAR TO '[A-Z][A-Za-z]+|');
COMMENT ON DOMAIN car_manufacturer IS 'The name of a car manufacturer (e.g, Ford, BMW, Chrysler, Mercedes etc.)';
CREATE TABLE mytable
(
"ID" serial NOT NULL,
"value" car_manufacturer,
CONSTRAINT pk_mytable PRIMARY KEY ("ID")
)
WITH (
OIDS=FALSE
);
ALTER TABLE mytable OWNER TO postgres;
提前致谢!
干杯,菲利普
PS:我的示例被归结为向您展示实际问题。所以,请不要被这个例子的琐碎所困扰:-)
最佳答案
我通常不对字符字段使用引号,而是使用不同的分隔符来避免嵌入逗号的困难,例如'|'将 open office 导出到 csv 时。然后在导入时指定分隔符并转义反斜杠以指定空 E'\\N'。
关于database - 通过 COPY FROM 导入的 CSV 不适用于包含的 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029360/
我是一名优秀的程序员,十分优秀!