-- -- ARRAYS -- CREATE TABLE arrtest ( a int2[], b int4[][][], c name[], d text[][], e float8[], f char(5)[], g varchar(5)[] ); -- -- only this array as a 0-based 'e', the others are 1-based. -- 'e' is also a large object. -- INSERT INTO arrtest (a[5], b[2][1][2], c, d, f, g) VALUES ('{1,2,3,4,5}', '{{{0,0},{1,2}}}', '{}', '{}', '{}', '{}'); UPDATE arrtest SET e[0] = '1.1'; UPDATE arrtest SET e[1] = '2.2'; INSERT INTO arrtest (f) VALUES ('{"too long"}'); ERROR: value too long for type character(5) INSERT INTO arrtest (a, b[2][2][1], c, d, e, f, g) VALUES ('{11,12,23}', '{{3,4},{4,5}}', '{"foobar"}', '{{"elt1", "elt2"}}', '{"3.4", "6.7"}', '{"abc","abcde"}', '{"abc","abcde"}'); INSERT INTO arrtest (a, b[1][2][2], c, d[2][1]) VALUES ('{}', '{3,4}', '{foo,bar}', '{bar,foo}'); SELECT * FROM arrtest; a | b | c | d | e | f | g -------------+-----------------+-----------+---------------+-----------+-----------------+------------- {1,2,3,4,5} | {{{0,0},{1,2}}} | {} | {} | | {} | {} {11,12,23} | {{3,4},{4,5}} | {foobar} | {{elt1,elt2}} | {3.4,6.7} | {"abc ",abcde} | {abc,abcde} {} | {3,4} | {foo,bar} | {bar,foo} | | | (3 rows) SELECT arrtest.a[1], arrtest.b[1][1][1], arrtest.c[1], arrtest.d[1][1], arrtest.e[0] FROM arrtest; a | b | c | d | e ----+---+--------+------+--- 1 | 0 | | | 11 | | foobar | elt1 | | | foo | | (3 rows) SELECT a[1], b[1][1][1], c[1], d[1][1], e[0] FROM arrtest; a | b | c | d | e ----+---+--------+------+--- 1 | 0 | | | 11 | | foobar | elt1 | | | foo | | (3 rows) SELECT a[1:3], b[1:1][1:2][1:2], c[1:2], d[1:1][1:2] FROM arrtest; a | b | c | d ------------+-----------------+-----------+--------------- {1,2,3} | {{{0,0},{1,2}}} | | {11,12,23} | | {foobar} | {{elt1,elt2}} | | {foo,bar} | (3 rows) SELECT array_dims(a) AS a,array_dims(b) AS b,array_dims(c) AS c FROM arrtest; a | b | c -------+-----------------+------- [1:5] | [1:1][1:2][1:2] | [1:3] | [1:2][1:2] | [1:1] | [1:2] | [1:2] (3 rows) -- returns nothing SELECT * FROM arrtest WHERE a[1] < 5 and c = '{"foobar"}'::_name; a | b | c | d | e | f | g ---+---+---+---+---+---+--- (0 rows) UPDATE arrtest SET a[1:2] = '{16,25}' WHERE NOT a = '{}'::_int2; UPDATE arrtest SET b[1:1][1:1][1:2] = '{113, 117}', b[1:1][1:2][2:2] = '{142, 147}' WHERE array_dims(b) = '[1:1][1:2][1:2]'; UPDATE arrtest SET c[2:2] = '{"new_word"}' WHERE array_dims(c) is not null; SELECT a,b,c FROM arrtest; a | b | c ---------------+-----------------------+------------------- {16,25,3,4,5} | {{{113,142},{1,147}}} | {} {} | {3,4} | {foo,new_word} {16,25,23} | {{3,4},{4,5}} | {foobar,new_word} (3 rows) SELECT a[1:3], b[1:1][1:2][1:2], c[1:2], d[1:1][2:2] FROM arrtest; a | b | c | d ------------+-----------------------+-------------------+---------- {16,25,3} | {{{113,142},{1,147}}} | | | | {foo,new_word} | {16,25,23} | | {foobar,new_word} | {{elt2}} (3 rows)