如何在COPY命令中转义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

我在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 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"')"

您不需要转义双引号,只要确保字符串正确地用单引号括起来即可。在单引号中,双引号与其他任何字符一样只是另一个字符。请检查编辑,它不起作用。您不需要转义双引号,只要确保字符串正确地用单引号括起来即可。在单引号中,双引号与其他任何字符一样只是另一个字符。请检查编辑,它不起作用