PostgreSQL如何通过索引获取数组元素?
PostgreSQL数组元素索引获取方法
PostgreSQL完全支持通过下标索引直接获取数组中的元素,需要注意PostgreSQL的数组下标默认从1开始计数,而非部分编程语言习惯的0起始。
基于你提供的测试表的使用示例
你提供的建表和插入语句如下:
CREATE TABLE groups_timetable(id SMALLINT PRIMARY KEY, timetable VARCHAR(40)[]); INSERT INTO groups_timetable(id, timetable) VALUES(1, '{"math, physical culture, programming", "math, economic theory"}');
索引查询示例
- 获取id为1的记录中
timetable数组的第一个元素:
SELECT timetable[1] FROM groups_timetable WHERE id = 1;
执行后返回结果为:math, physical culture, programming
- 获取第二个元素:
SELECT timetable[2] FROM groups_timetable WHERE id = 1;
执行后返回结果为:math, economic theory
如果需要查询数组中包含某元素的所有行,还可以配合GIN索引优化查询性能,创建GIN索引的语句如下:
CREATE INDEX idx_groups_timetable_timetable ON groups_timetable USING GIN(timetable);
创建索引后,使用@>包含运算符的查询会走索引加速,比如查询所有timetable包含math, economic theory的记录:
SELECT * FROM groups_timetable WHERE timetable @> ARRAY['math, economic theory']::varchar[];
补充说明:如果你习惯0起始的下标,也可以手动指定数组的下标范围,比如声明数组为
timetable VARCHAR(40)[0],后续就可以用0作为起始下标查询。
内容的提问来源于stack exchange,提问作者user16624394
相关产品推荐
相关产品推荐

