首页 > 解决方案 > 插入到只有一个元素的自定义类型的表列

问题描述

在 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

我也执行了一个选择语句来验证。以下是结果。

 id | structdata 
----+------------
  1 | (abc,def)
(1 row)

是什么导致了这种行为?

标签: postgresql

解决方案


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

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

推荐阅读