Postgresql 如何创建在Postgres中保存数组的列?

Postgresql 如何创建在Postgres中保存数组的列?,postgresql,Postgresql,背景: 我正在为预订日历制作db。预订是以小时为基础的,所以我需要在一个名为“hours\u reserved”的列中插入许多项目 我需要的示例表: Table "Space" Column / Values id / 1 date / 5.2.2020 hours / { 8-10, 10-12 } 所以我需要将多个

背景:

我正在为预订日历制作db。预订是以小时为基础的,所以我需要在一个名为“hours\u reserved”的列中插入许多项目

我需要的示例表:

        Table "Space"
  Column        /          Values
 id             /             1
 date           /          5.2.2020
 hours          /      {  8-10, 10-12 }


所以我需要将多个项目插入到“空间”表的“小时”列中。 我在博士后如何做到这一点? 还有没有更好的方法来实现这一点

ALTER TABLE mytable
ADD COLUMN myarray text[];
很好

我在尝试使用postman(create works fine)将(更新)放入该专栏时遇到以下问题:

结果分为:

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


有更多的方法可以做到这一点,这取决于
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);

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

 SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"
会让步

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

但是,您可以执行一点转换来删除它们,并能够执行带有
保留的联接

with unnested as (
  SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"
)
select id,date_schedule,replace(hours::text, '"','') from unnested

将字段定义为text[]也可以实现同样的效果(插入语法不同,但并不重要)

在这种情况下,您的数据将如下所示:

您可以将其展开为:

SELECT id,date_schedule, unnest(hours) FROM "public"."space"

阅读数据库规范化和创建一对多关系。虽然在Postgres中是可能的,但将东西存储在数组中很少是最好的选择。在为这个表创建节点端点时,我需要指定什么吗?大多数ORM都能无缝地处理javascript对象。如果你计划只使用一个驱动程序,那么就选择PG PromiseI决定用文本[]进行测试。知道为什么将put与邮递员一起使用会返回“消息”:“错误:整数类型的输入语法无效:\“{\”hours\:[\“8-10\”]}\”?不知道,但如果您使用的是say、express来处理请求,请将它们记录下来以查看发生了什么。也许您没有使用json解析中间件?是的,内容类型是json。我的端点是这样的
//updateexports.updateVaraus=async(id,myarray)=>{try{const result=wait client.query('UPDATE varaus SET id=1$,myarray=$2')[id,myarray]);return result.rows}catch(err){throw new Error(err);}
 SELECT id,date_schedule, jsonb_array_elements(hours) hours FROM "public"."space"
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"