欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

举例简单介绍PostgreSQL中的数组

程序员文章站 2022-07-06 10:20:33
 postgresql 有很多丰富的开箱即用的数据类型,从标准的数字数据类型、到几何类型,甚至网络数据类型等等。虽然很多人会忽略这些数据类 型,但却是我最喜欢的特...

 postgresql 有很多丰富的开箱即用的数据类型,从标准的数字数据类型、到几何类型,甚至网络数据类型等等。虽然很多人会忽略这些数据类 型,但却是我最喜欢的特性之一。而数组数据类型正如你所期望的,可以在 postgresql 存储数组数据,有了这个特性,你可以在单个表中实现以往需要多个表才能实现的存储要求。

为什么要使用数组来存储数据,如果你是应用开发人员,那么在数据库中使用同样的模型来存储程序中的数据,何乐而不为呢。况且这样的做法还能提升性能。下面我们将介绍如何使用 postgresql 的数组类型。


假设你在一个网站上购买物品,那么你所购买的信息就可以用下面这个表来表示:
 

create table purchases (
  id integer not null,
  user_id integer,
  items decimal(10,2) [100][1],
  occurred_at timestamp
);

在这个表中,拥有一个数组字段来保持多个商品记录,包括:

  •     购买商品的编号
  •     数量
  •     价格

要往这个表里插入数据的 sql 如下:
 
insert into purchases values (1, 37, '{{15.0, 1.0, 25.0}, {15.0, 1.0, 25.0}}', now());
insert into purchases values (2, 2, '{{11.0, 1.0, 4.99}}', now());
一个更有实际意义的例子是标签的使用,你可以用标签来标识购买的物品:

 

create table products (
  id integer not null,
  title character varying(255),
  description text,
  tags text[],
  price numeric(10,2)
);

你可使用基本的查询语句来获取数据:

 

select title, unnest(tags) items from products


你还可以使用 postgres 的 gin and gist  索引来根据指定的标签快速搜索产品:
 

-- search where product contains tag ids 1 and 2
select *
from  products
where  tags @> array[1, 2]
 
-- search where product contains tag ids 1 or 2
select *
from  products
where  tags && array[1, 2]