Если я использую безымянные составные типы в таблицах, я могу использовать следующий синтаксис в INSERT:
create table t1(
c1 varchar(2) array[2]
);
CREATE TABLE
create table t2(
c1 varchar(2)
);
CREATE TABLE
create table t3(
c1 int array[2]
);
CREATE TABLE
insert into t1 values ('{"aa", "bb"}');
INSERT 0 1
insert into t2 values ('aa');
INSERT 0 1
insert into t3 values ('{ 1, 2 }');
INSERT 0 1
Но если я использую типы имен, это не работает:
CREATE TYPE test1 AS (field varchar(2) ARRAY[2]);
CREATE TYPE
CREATE TYPE test2 AS (field varchar(2) );
CREATE TYPE
CREATE TYPE test3 AS (field int ARRAY[2]);
CREATE TYPE
create table tt1(
c1 test1
);
CREATE TABLE
create table tt2(
c1 test2
);
CREATE TABLE
create table tt3(
c1 test3
);
CREATE TABLE
insert into tt1 values ('{"aa", "bb"}');
psql:tt0.sql:37: ERROR: malformed record literal: "{"aa", "bb"}"
LINE 1: insert into tt1 values ('{"aa", "bb"}');
^
DETAIL: Missing left parenthesis.
insert into tt2 values ('aa');
psql:tt0.sql:38: ERROR: malformed record literal: "aa"
LINE 1: insert into tt2 values ('aa');
^
DETAIL: Missing left parenthesis.
insert into tt3 values ('{ 1, 2 }');
psql:tt0.sql:39: ERROR: malformed record literal: "{ 1, 2 }"
LINE 1: insert into tt3 values ('{ 1, 2 }');
^
DETAIL: Missing left parenthesis.
Если я добавить скобки, это все еще не работает:
insert into tt1 values (('{"aa", "bb"}'));
ERROR: malformed record literal: "{"aa", "bb"}"
LINE 1: insert into tt1 values (('{"aa", "bb"}'));
^
DETAIL: Missing left parenthesis.
insert into tt2 values (('aa'));
ERROR: malformed record literal: "aa"
LINE 1: insert into tt2 values (('aa'));
^
DETAIL: Missing left parenthesis.
insert into tt3 values (('{ 1, 2 }'));
ERROR: malformed record literal: "{ 1, 2 }"
LINE 1: insert into tt3 values (('{ 1, 2 }'));
^
DETAIL: Missing left parenthesis.
Если я использую синтаксис ROW и ARRAY, это работает:
insert into tt1(c1) values (ROW(ARRAY ['aa', 'bb' ]));
INSERT 0 1
insert into tt2 values (ROW ('aa'));
INSERT 0 1
insert into tt3 values (ROW(ARRAY[ 1, 2 ]));
INSERT 0 1
Я использовал PostgreSQL 12.2.