我的UD类型很少:
CREATE TYPE SOME_TYPE AS (
aaa INT,
bbb TEXT
);
CREATE TYPE SOME_ANOTHER_TYPE AS (
ccc int,
ddd SOME_TYPE
);
CREATE TYPE SOME_ANOTHER_DAMNIT_TYPE AS (
eee int,
fff SOME_ANOTHER_TYPE
);
好的,我可以先用SQL编写:
select '(123,blablabla)'::SOME_TYPE;
我可以成为第二名:
select '(456, "(123,blablabla)")'::SOME_ANOTHER_TYPE;
但如果我试着做第三个......
select '(789,"(456, "(123,blablabla)")")'::SOME_ANOTHER_DAMNIT_TYPE;
... pl throw错误:
[22P02]错误:记录字面错误:“(456,”(123Подробности:
输入意外结束。
问题:如何在没有plpgsql的情况下制作第三种类型?我需要它来从jdbc调用,以传输对象。我知道,我可以“扁平化”这个物体,但我想把它“原样”转移。
答案 0 :(得分:1)
问题是您嵌套了引号而没有转义内部引号。你可以这样:
select '(789,"(456, ""(123,blablabla)"")")'::SOME_ANOTHER_DAMNIT_TYPE;
即。通过加倍"
。
对于您的情况,我建议您避免将记录值表示为text
,以便稍后将其作为您的类型投射。您可以直接指定记录值,而无需通过text
,如下所示:
select (789,(456, (123,'blablabla')))::SOME_ANOTHER_DAMNIT_TYPE;