首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgres中创建包含数组的列?

如何在Postgres中创建包含数组的列?
EN

Stack Overflow用户
提问于 2020-02-05 08:58:44
回答 2查看 59关注 0票数 0

背景:

我在为预约日历做个分号。预订是按小时计算的,因此我需要将许多项插入到一个名为"hours_reserved“的列中。

我需要的示例表:

代码语言:javascript
复制
        Table "Space"
  Column        /          Values
 id             /             1
 date           /          5.2.2020
 hours          /      {  8-10, 10-12 }
代码语言:javascript
复制
        Table "reservation"
  Column        /          Values
 id             /             1
 space_id       /             1
 date           /          5.2.2020
 reserved_hours /            8-10
代码语言:javascript
复制
        Table "reservation"
  Column        /          Values
 id             /             2
 space_id       /             1
 date           /          5.2.2020
 hours          /           10-12

因此,我需要在“空格”表“小时”列中插入多个项。我在Postgres怎么做?还有更好的方法来实现这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 11:35:28

根据hours字段的类型(即text[]、json或jsonb),我使用jsonb有更多的方法,因为您可以使用它做很多事情,您会发现这种体验在短期内是有用的。

代码语言:javascript
复制
CREATE TABLE "public"."space" 
("id" SERIAL, "date_schedule" date, "hours" jsonb, PRIMARY KEY ("id"))

每当您在此表中插入手工构建的记录时,将其写入文本(单引号json对象),并将其转换为jsonb

代码语言:javascript
复制
insert into "space" 
  (date_schedule,hours) 
values 
  ('05-02-2020'::date, '["8-10", "10-12"]'::jsonb);

有不止一种方法可以将这些可用的时间与预订相匹配,您可以在json和jsonb操作上查看文档。例如,做:

代码语言:javascript
复制
 SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"

会屈服

其中有这些丑陋的双引号(这是正确的,因为json可以容纳几种标量,该列是polimorfic :D)。

但是,您可以执行一个小的转换来删除它们,并且能够使用reservations执行一个联接。

代码语言:javascript
复制
with unnested as (
  SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"
)
select id,date_schedule,replace(hours::text, '"','') from unnested

也可以将字段定义为文本插入语法不同,但很琐碎。

在该场景中,您的数据如下所示:

您可以将其展开为:

代码语言:javascript
复制
SELECT id,date_schedule, unnest(hours) FROM "public"."space"

票数 1
EN

Stack Overflow用户

发布于 2020-02-05 11:26:06

显然

代码语言:javascript
复制
ALTER TABLE mytable
ADD COLUMN myarray text[];

效果很好。

当我试图使用postman(create )将(更新)放入该专栏时,我遇到了以下问题:

代码语言:javascript
复制
{
    "myarray": ["8-10"]
}

取得的成果包括:

“消息”:“错误:整数类型的无效输入语法:\”{\“myarray\”:\“8-10”}\“”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60072185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档