Обсуждение: Unusual behaviour with intarray
Hi,
I am using intarray in contrib, and have seen some strange behaviour with
one of the operations. Anyone know whats going on here?
cabbage=# create table test (id int, writers int[]);
CREATE TABLE
cabbage=# insert into test values(1, '{}');
INSERT 1545023 1
cabbage=# select * from test;
id | writers
----+---------
1 | {}
(1 row)
cabbage=# update test set writers = (select writers - '{1}'::int[]);
UPDATE 1
cabbage=# select * from test;
id | writers
----+---------
1 | {}
(1 row)
cabbage=# update test set writers = (select writers - '{1}'::int[]);
UPDATE 1
cabbage=# select * from test;
id | writers
----+-----------
1 | {3044207}
(1 row)
Thanks for any help
Adam
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Ok, this is a bug.
I'll post a patch as soon as possible.
Adam Witney wrote:
> Hi,
>
> I am using intarray in contrib, and have seen some strange behaviour with
> one of the operations. Anyone know whats going on here?
>
> cabbage=# create table test (id int, writers int[]);
> CREATE TABLE
> cabbage=# insert into test values(1, '{}');
> INSERT 1545023 1
> cabbage=# select * from test;
> id | writers
> ----+---------
> 1 | {}
> (1 row)
>
> cabbage=# update test set writers = (select writers - '{1}'::int[]);
> UPDATE 1
> cabbage=# select * from test;
> id | writers
> ----+---------
> 1 | {}
> (1 row)
>
> cabbage=# update test set writers = (select writers - '{1}'::int[]);
> UPDATE 1
> cabbage=# select * from test;
> id | writers
> ----+-----------
> 1 | {3044207}
> (1 row)
>
> Thanks for any help
>
> Adam
>
>
--
Teodor Sigaev E-mail: teodor@sigaev.ru
Adam Witney <awitney@sghms.ac.uk> writes:
> I am using intarray in contrib, and have seen some strange behaviour with
> one of the operations. Anyone know whats going on here?
I think unix_uniq() is broken for the case of a zero-element array ...
regards, tom lane
Please apply patch for 7.3 CVS brach. Patch fixes the problem, for 7.4 it will
be later (with other changes).
Teodor Sigaev wrote:
> Ok, this is a bug.
> I'll post a patch as soon as possible.
>
> Adam Witney wrote:
>
>> Hi,
>>
>> I am using intarray in contrib, and have seen some strange behaviour with
>> one of the operations. Anyone know whats going on here?
>>
>> cabbage=# create table test (id int, writers int[]);
>> CREATE TABLE
>> cabbage=# insert into test values(1, '{}');
>> INSERT 1545023 1
>> cabbage=# select * from test;
>> id | writers ----+---------
>> 1 | {}
>> (1 row)
>>
>> cabbage=# update test set writers = (select writers - '{1}'::int[]);
>> UPDATE 1
>> cabbage=# select * from test;
>> id | writers ----+---------
>> 1 | {}
>> (1 row)
>>
>> cabbage=# update test set writers = (select writers - '{1}'::int[]);
>> UPDATE 1
>> cabbage=# select * from test;
>> id | writers ----+-----------
>> 1 | {3044207}
>> (1 row)
>>
>> Thanks for any help
>>
>> Adam
>>
>>
>
--
Teodor Sigaev E-mail: teodor@sigaev.ru