#postgresql
#postgresql
Вопрос:
Отказ от ответственности: приведенные ниже примеры не имеют смысла.
Этот код работает:
CREATE TYPE item AS (
name text,
price int
);
CREATE TYPE items_pack AS (
items item[],
count int
);
CREATE TABLE player (
items_packs items_pack[],
name text
);
INSERT INTO player VALUES (
ARRAY[
(ARRAY[
('sword', 100)::item,
('hammer', 200)::item
], 2)::items_pack,
(ARRAY[
('knife', 300)::item,
('gun', 400)::item
], 2)::items_pack
],
'anyname'
);
Но это не работает (атрибут count был удален из типа items_pack):
CREATE TYPE item AS (
name text,
price int
);
CREATE TYPE items_pack AS (
items item[]
-- count is removed
);
CREATE TABLE player (
items_packs items_pack[],
name text
);
INSERT INTO player VALUES (
ARRAY[
(ARRAY[
('sword', 100)::item,
('hammer', 200)::item
])::items_pack,
(ARRAY[
('knife', 300)::item,
('gun', 400)::item
])::items_pack
],
'anyname'
);
ОШИБКА: не удается привести тип item[] к items_pack
Похоже, синтаксис непоследователен? Или я что-то упускаю?
Комментарии:
1. Попробуйте
... row(array[...])::items_pack ...
2. @Abelisto Большое спасибо. Это сработало.
3. Вы должны явно указать
row
ключевое слово, если в нем есть только один элемент: конструкторы строк . Удачи.