PostgreSQL的数组

运维 数据库运维 大数据 PostgreSQL
PostgreSQL 有很多丰富的开箱即用的数据类型,从标准的数字数据类型、到几何类型,甚至网络数据类型等等。虽然很多人会忽略这些数据类型,但却是我最喜欢的特性之一。

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

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

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

  1. CREATE TABLE purchases (  
  2.     id integer NOT NULL,  
  3.     user_id integer,  
  4.     items decimal(10,2) [100][1],  
  5.     occurred_at timestamp 
  6. ); 

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

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

要往这个表里插入数据的 SQL 如下:

  1. INSERT INTO purchases VALUES (1, 37, '{{15.0, 1.0, 25.0}, {15.0, 1.0, 25.0}}', now());  
  2. INSERT INTO purchases VALUES (2, 2, '{{11.0, 1.0, 4.99}}', now()); 

一个更有实际意义的例子是标签的使用,你可以用标签来标识购买的物品:

  1. CREATE TABLE products (  
  2.     id integer NOT NULL,  
  3.     title character varying(255),  
  4.     description text,  
  5.     tags text[],  
  6.     price numeric(10,2)  
  7. ); 

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

  1. SELECT title, unnest(tags) items FROM products 

你还可以使用 Postgres 的 Gin and Gist  索引来根据指定的标签快速搜索产品:

  1. -- Search where product contains tag ids 1 AND 2  
  2. SELECT  *  
  3. FROM    products  
  4. WHERE   tags @> ARRAY[1, 2]  
  5.  
  6. -- Search where product contains tag ids 1 OR 2  
  7. SELECT  *  
  8. FROM    products  
  9. WHERE   tags && ARRAY[1, 2] 

英文原文:http://craigkerstiens.com/2012/08/20/arrays-in-postgres/

本文链接:http://www.oschina.net/question/12_65936

责任编辑:林师授 来源: OSCHINA
相关推荐

2014-03-03 10:10:37

PostgreSQL数组

2022-10-20 23:15:10

PostgreSQL算法机制

2017-08-17 15:13:52

PostgreSQL MVCC机制

2014-01-05 17:51:03

2023-11-30 16:29:16

PostgreSQL数据库Kubernetes

2010-09-29 13:52:33

PostgreSQL

2023-03-27 09:57:00

PostgreSQL并发索引

2014-01-02 13:22:01

PythonPostgreSQL

2014-01-02 16:06:03

PostgreSQL实用函数

2014-01-02 15:41:24

PostgreSQLPHP

2014-01-02 14:04:39

PostgreSQLPerl

2014-01-03 09:30:44

PostgreSQL数字函数

2022-07-05 10:06:55

PostgreSQLMySQL数据库

2013-12-26 13:19:26

PostgreSQL优化

2014-01-03 13:27:33

PostgreSQL

2014-04-08 09:49:27

PostgreSQL双缓冲

2014-12-01 11:30:06

PostgreSQL

2018-06-22 15:47:06

数据库PostgreSQLMySQL

2014-02-17 10:54:13

PostgreSQL数据库

2018-09-28 14:37:25

数据库PostgreSQNoSQL
点赞
收藏

51CTO技术栈公众号