gtxyzz

PostgreSQL的数组

gtxyzz 运维技术 2022-11-20 462浏览 0

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

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

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

CREATETABLEpurchases( 
idintegerNOTNULL, 
user_idinteger, 
itemsdecimal(10,2)[100][1], 
occurred_attimestamp
);

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

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

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

INSERTINTOpurchasesVALUES(1,37,'{{15.0,1.0,25.0},{15.0,1.0,25.0}}',now()); 
INSERTINTOpurchasesVALUES(2,2,'{{11.0,1.0,4.99}}',now());

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

CREATETABLEproducts( 
idintegerNOTNULL, 
titlecharactervarying(255), 
descriptiontext, 
tagstext[], 
pricenumeric(10,2) 
);

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

SELECTtitle,unnest(tags)itemsFROMproducts

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

--Searchwhereproductcontainstagids1AND2 
SELECT* 
FROMproducts 
WHEREtags@>ARRAY[1,2] 

--Searchwhereproductcontainstagids1OR2 
SELECT* 
FROMproducts 
WHEREtags&&ARRAY[1,2]

继续浏览有关 PostgreSQL 的文章
发表评论