背景:
我在为预约日历做个分号。预订是按小时计算的,因此我需要将许多项插入到一个名为"hours_reserved“的列中。
我需要的示例表:
Table "Space"
Column / Values
id / 1
date / 5.2.2020
hours / { 8-10, 10-12 } Table "reservation"
Column / Values
id / 1
space_id / 1
date / 5.2.2020
reserved_hours / 8-10 Table "reservation"
Column / Values
id / 2
space_id / 1
date / 5.2.2020
hours / 10-12因此,我需要在“空格”表“小时”列中插入多个项。我在Postgres怎么做?还有更好的方法来实现这一点吗?
发布于 2020-02-05 11:35:28
根据hours字段的类型(即text[]、json或jsonb),我使用jsonb有更多的方法,因为您可以使用它做很多事情,您会发现这种体验在短期内是有用的。
CREATE TABLE "public"."space"
("id" SERIAL, "date_schedule" date, "hours" jsonb, PRIMARY KEY ("id"))每当您在此表中插入手工构建的记录时,将其写入文本(单引号json对象),并将其转换为jsonb
insert into "space"
(date_schedule,hours)
values
('05-02-2020'::date, '["8-10", "10-12"]'::jsonb);

有不止一种方法可以将这些可用的时间与预订相匹配,您可以在json和jsonb操作上查看文档。例如,做:
SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"会屈服

其中有这些丑陋的双引号(这是正确的,因为json可以容纳几种标量,该列是polimorfic :D)。
但是,您可以执行一个小的转换来删除它们,并且能够使用reservations执行一个联接。
with unnested as (
SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"
)
select id,date_schedule,replace(hours::text, '"','') from unnested

也可以将字段定义为文本插入语法不同,但很琐碎。。
在该场景中,您的数据如下所示:

您可以将其展开为:
SELECT id,date_schedule, unnest(hours) FROM "public"."space"

发布于 2020-02-05 11:26:06
显然
ALTER TABLE mytable
ADD COLUMN myarray text[];效果很好。
当我试图使用postman(create )将(更新)放入该专栏时,我遇到了以下问题:
{
"myarray": ["8-10"]
}取得的成果包括:
“消息”:“错误:整数类型的无效输入语法:\”{\“myarray\”:\“8-10”}\“”
https://stackoverflow.com/questions/60072185
复制相似问题