PostgreSQL的Array Type

PostgreSQL的字段类型是有维度的,默认是0,如果设置了维度,就变成了数组类型

如果有张数据表,我们一般会给数据打上tag,多个tag对应一个数据,如果没有维度我们只能新建一张表,保存tag和数据对应关系。现在我们有Array Type。就可以直接使用一个字段来保存了。

CREATE TABLE "public"."posts" ( "id" int8 NOT NULL, "title" varchar(255) NOT NULL, "tags" varchar(16)[] NOT NULL )

普通类型后面添加“[]”就转换成对应的数组类型;

插入数据使用{}包住,使用,分隔。

INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (1, '内容A', '{运动,健康}');
INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (2, '内容B', '{美食,健康}');
INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (3, '内容C', '{运动}');

In Array查询,有ANY和ALL两个方法,ANY是里面有就行了,ALL就得全匹配了。

SELECT * FROM "posts" WHERE '运动' = ALL("tags");

只能查到内容C,只有运动的数据。

SELECT * FROM "posts" WHERE '运动' = ANY("tags");

能同时查到内容B和内容C,包含了运动的数据。

查询同时有运动和美食的数据要怎么查?需要使用generate_subscripts方法

SELECT * FROM ( SELECT "title", "tags", generate_subscripts ( tags, 1 ) AS s FROM posts ) AS foo WHERE tags [ s ] IN ( '运动', '美食' )

评论