在PostgreSQL 10.3中,我尝试了以下两种方案。
1
CREATE TYPE customtype AS (val VARCHAR(20));
CREATE TABLE structdatatable(id INTEGER, structdata customtype);
然后执行以下插入语句。
INSERT INTO structdatatable VALUES(1, ('abc'));
这会导致以下错误。
DETAIL: Missing left parenthesis.
2
CREATE TYPE customtype2 AS (val VARCHAR(20), val2 VARCHAR(20));
CREATE TABLE structdatatable2(id INTEGER, structdata customtype2);
然后执行以下插入语句。
INSERT INTO structdatatable2 VALUES(1, ('abc','def'));
使用以下输出成功执行此操作。
INSERT 0 1
我也执行了一个select语句来验证。以下是结果。
id | structdata
----+------------
1 | (abc,def)
(1 row)
导致此行为的原因是什么?
答案 0 :(得分:1)
括号中的单个值不会自动检测为记录。您可以使用row constructor语法来明确这一点:
INSERT INTO structdatatable VALUES(1, row('abc'));