插入复合类型数组给出错误 postgresql 9.4--

Posted

技术标签:

【中文标题】插入复合类型数组给出错误 postgresql 9.4--【英文标题】:insert composite type array gives error postgresql 9.4-- 【发布时间】:2016-02-26 13:41:50 【问题描述】:
CREATE TABLE people(   
name_ varchar(50) NOT NULL,
count int NOT NULL DEFAULT 0
)

CREATE TABLE person_added(
date_ date NOT NULL,
all_people_ people[],
all_people_count int NOT NULL
)

CREATE TABLE all_people_array_table(
id SERIAL,
people_array person_added[]
)

INSERT INTO all_people_array_table(people_array) (SELECT ARRAY[CURRENT_DATE,  ARRAY[('Jack',3)::people,  ('John',6)::people], 1000]   )

我收到此错误;

错误:ARRAY 类型的日期和情绪[] 无法匹配

正确的插入语句是什么?

【问题讨论】:

【参考方案1】:

这对我有用:

insert into all_people_array_table(people_array)
select array[
    (current_date,
     array[
        ('Jack',3)::people,
        ('John',6)::people
     ], 1)::person_added
];

【讨论】:

如何插入 people_array 列,另一个 people[] 元素。我如何填充这个数组,如 ('Jack',3)、('John',8)、('Chris', 5) 等......在数组中使用相同的 current_date 值? update all_people_array_table set people_array[1].all_people_ = array_append(people_array[1].all_people_, ('Chris', 5)::people ) where id = 1; 但我不得不说这不是存储数据的真正关系方式。我建议你重新考虑你的数据库结构。 再次感谢:)) 不幸的是我需要这样做......但无论如何感谢您的提示。 最后一个问题:)...如何根据 person_add 表类型(由 current_date 添加)中的日期在 all_people_ 列中选择 people[] 数组?

以上是关于插入复合类型数组给出错误 postgresql 9.4--的主要内容,如果未能解决你的问题,请参考以下文章

复合数组类型作为 PostgreSQL 中的 OUTPUT 参数

PostgreSQL PDO 插入数组类型

为啥递归联合不适用于 PostgreSQL 中的复合类型

在复合类型数组中搜索元素

尝试插入长数组时出现 Postgresql 错误

Postgresql:复合类型并选择进入