我在Postgres数据库中有以下表格:
CREATE TABLE test(
id SERIAL NOT NULL,
arr int[] NOT NULL
)
该数组包含大约500k个元素。
我想知道是否有一种有效的方法来更新arr
列,方法是在给定开始和结束索引的情况下从数组中删除一组元素,或者只删除第一个元素的数量" 34;删除。
答案 0 :(得分:2)
您可以使用切片(请参阅8.15.3. Accessing Arrays)。
create table example
as select array[1,2,3,4,5,6,7,8] arr;
删除前3个元素:
select arr[4:8]
from example;
arr
-------------
{4,5,6,7,8}
(1 row)
从4到5删除元素:
select arr[1:3] || arr[6:8] as arr
from example;
arr
---------------
{1,2,3,6,7,8}
(1 row)
如果数组的长度未知,请删除前5个元素:
select arr[6:array_length(arr,1)]
from example;
arr
---------
{6,7,8}
(1 row)
答案 1 :(得分:2)
您可以access个别元素或元素范围:
如果你是想要删除元素5到8,你可以这样做:
select arr[1:4]||arr[9:]
from test;
或作为更新:
update test
set arr = arr[1:4]||arr[9:];
要删除"前n个元素",只需使用n + 1个元素之后的切片,例如删除前5个元素:
select arr[6:]
from test;
语法arr[6:]
需要Postgres 9.6或更高版本,适用于您需要的早期版本
select arr[6:cardinality(arr)]
from test;
在9.4中引入了 cardinality()
,如果您使用的是更旧的版本,则需要:
select arr[6:array_lengt(arr,1)]
from test;