The following bug has been logged online:
Bug reference: 5840
Logged by: Karsten Loesing
Email address: karsten.loesing@gmx.net
PostgreSQL version: 8.4.5
Operating system: Mac OS X 10.6 and Debian Lenny
Description: Updating arrays using subscripted assignment results in
uninitialized values
Details:
Modifying an array as described in
http://www.postgresql.org/docs/8.4/static/arrays.html#ARRAYS-MODIFYING
sometimes leads to uninitialized values. See the following example:
CREATE TABLE test_array (my_array BIGINT[]);
INSERT INTO test_array (my_array) VALUES ('[40:41]={40,41}');
UPDATE test_array SET my_array[1:2]='{1,2}';
SELECT * FROM test_array;
The result might be:
{16383,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,N
ULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NU
LL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,40,41}
Running the update a second time leads to the expected result:
UPDATE test_array SET my_array[1:2]='{1,2}';
SELECT * FROM test_array;
{1,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,N
ULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,40,41}
The problem only occurs with a sufficiently large "hole" between the first
and second array part.