Вставка в столбец таблицы пользовательского типа, который имеет только один элемент - PullRequest
0 голосов
/ 07 июня 2018

В 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 голосов
/ 07 июня 2018

Одно значение в скобках не определяется автоматически как запись.Вы можете использовать синтаксис Конструктор строки , чтобы сделать это однозначным:

INSERT INTO structdatatable VALUES(1, row('abc'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...