Обсуждение: 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