中国信息官CIO精英 前沿视野 经验之谈 职业发展 信息官杂谈 | 产品资讯笔记本 商用电脑 服务器 办公 网络设备 存储设备 软件 显示设备 其他

您当前的位置: 首页 > 资料库 > cio百科 〉PostgreSQL的数组类型

PostgreSQL的数组类型

2012-08-24 17:11:12

    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]

(责编:sunnie)

投稿邮箱:cio114@foxmail.com