插入到只有一个元素的自定义类型的表列

时间:2018-06-07 08:53:57

标签: postgresql

在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)

导致此行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

括号中的单个值不会自动检测为记录。您可以使用row constructor语法来明确这一点:

INSERT INTO structdatatable VALUES(1, row('abc'));