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
我也执行了一个选择语句来验证。以下是结果。
id | structdata
----+------------
1 | (abc,def)
(1 row)
是什么导致了这种行为?
解决方案
括号中的单个值不会自动检测为记录。您可以使用行构造函数语法来明确这一点:
INSERT INTO structdatatable VALUES(1, row('abc'));
推荐阅读
- javascript - Next.JS 和 Nodemailer,从联系表单发送电子邮件
- reactjs - 故事书投掷错误
- ios - 重复的符号
- reactjs - 在包中使用 Material UI 时,只能在函数组件的主体内部调用 Hooks
- c++ - 是否在没有对象未定义行为的情况下访问静态 struct::var?
- java - Java中“if”和“if else”的不同表现
- python - 使用带有 PyQt5 和 OpenGL 的 VBO 绘制多个对象?
- sql - 获取每个组的前 5 条记录并将它们连接到每组的一行中
- python - 在 Python 中将 txt 数据拆分为列
- python - 我正在尝试获取代理和端口我获取代理但我无法获取端口请帮助我