介绍PostgreSQL的数组类型

日期: 2012-08-22 作者:开源中国 来源:TechTarget中国 英文

  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]

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐