如何在COPY命令中转义PostgreSQL用户定义类型中的双引号
我在COPY命令中转义某些字符(例如双qoutes)时遇到问题。我正在将旧的Oracle数据库迁移到PostgreSQL 11.7。Oracle数据库中有用户定义的类型,我正在将这些类型迁移到PostgreSQL用户定义的等效类型中,例如:如何在COPY命令中转义PostgreSQL用户定义类型中的双引号,postgresql,escaping,postgresql-copy,Postgresql,Escaping,Postgresql Copy,我在COPY命令中转义某些字符(例如双qoutes)时遇到问题。我正在将旧的Oracle数据库迁移到PostgreSQL 11.7。Oracle数据库中有用户定义的类型,我正在将这些类型迁移到PostgreSQL用户定义的等效类型中,例如: create type udt_type as ( x double precision, y double precision, rotation double precision, width double precision, height doubl
create type udt_type as
(
x double precision,
y double precision,
rotation double precision,
width double precision,
height double precision,
justification integer,
font varchar(255),
text varchar(1000)
);
如果我创建“复制”命令,它将如下所示:
COPY tablename (UDT_COLUMN) FROM stdin WITH NULL 'NULL' DELIMITER '|' ;
(707141.392,235754.051,6.283185,,,0.0,,Some text 2")
这里的双引号应该是英寸标记,但我无法正确插入值,因为每次我转义双引号时,PostgreSQL都会将字符加倍,结果是“
我尝试了很多其他版本:
(707141.392,235754.051,6.283185,,,0.0,,Some text 2")
(707141.392,235754.051,6.283185,,,0.0,,"Some text 2""")
(707141.392,235754.051,6.283185,,,0.0,,Some text 2\")
(707141.392,235754.051,6.283185,,,0.0,,"Some text 2\"")
...
结果:
(707141.392,235754.051,6.283185,,,0.0,,"Some text 2""")
如何正确地转义字符。我甚至无法在DataGrip或pgadmin中手动更改该值,否则会出现意外的输入结束错误。转义在insert中正常工作,但在COPY中用户定义类型的行为不同
编辑
对于单通道,它不起作用:
COPY tablename (UDT_COLUMN) FROM stdin WITH NULL 'NULL' DELIMITER '|' ;
(707141.392,235754.051,6.283185,,,0.0,,'Some text 2"')
错误:
psql:tablename.sql:3: ERROR: malformed record literal: "(707141.392,235754.051,6.283185,,,0.0,,'Some text 2"')"
DETAIL: Unexpected end of input.
CONTEXT: COPY tablename, line 1, column udt_column: "(707141.392,235754.051,6.283185,,,0.0,,'Some text 2"')"
您不需要转义双引号,只要确保字符串正确地用单引号括起来即可。在单引号中,双引号与其他任何字符一样只是另一个字符。请检查编辑,它不起作用。您不需要转义双引号,只要确保字符串正确地用单引号括起来即可。在单引号中,双引号与其他任何字符一样只是另一个字符。请检查编辑,它不起作用