From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | mstory(at)uchicago(dot)edu |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: deleting from arrays |
Date: | 2005-01-17 07:08:36 |
Message-ID: | 20050117070836.GA92270@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Sun, Jan 16, 2005 at 11:56:04PM -0600, mstory(at)uchicago(dot)edu wrote:
>
> I've searched the documentation for a simple way to delete a single value from
> an array, i've come up with a complecated way to do it, but was wondering if
> there was some simple command to remove a single value from an array, where the
> position of the value in the array is unknown.
For integer arrays see the contrib/intarray module. Otherwise you
could write a function and create an operator around it -- maybe
there's an easier way, but the following works for arrays of any
type in simple tests:
CREATE FUNCTION array_remove(anyarray, anyelement) RETURNS anyarray AS '
DECLARE
a ALIAS FOR $1;
v ALIAS FOR $2;
newa a%TYPE := ''{}'';
i integer;
BEGIN
FOR i IN array_lower(a, 1) .. array_upper(a, 1) LOOP
IF a[i] <> v THEN
newa := array_append(newa, a[i]);
END IF;
END LOOP;
RETURN newa;
END;
' LANGUAGE plpgsql IMMUTABLE STRICT;
CREATE OPERATOR - (
LEFTARG = anyarray,
RIGHTARG = anyelement,
PROCEDURE = array_remove
);
SELECT '{bob,carol,ted,alice}'::text[] - 'carol';
?column?
-----------------
{bob,ted,alice}
(1 row)
SELECT '{2,3,5,7}'::int[] - 3;
?column?
----------
{2,5,7}
(1 row)
--
Michael Fuhr
http://www.fuhr.org/~mfuhr/
From | Date | Subject | |
---|---|---|---|
Next Message | Tony Caduto | 2005-01-17 07:37:50 | Call for Beta Testers (PG Lightning Admin) |
Previous Message | lol | 2005-01-17 06:59:13 | Re: PostgreSQL 8 on windows very slow |