Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 066216347C4 for ; Wed, 8 Apr 2009 12:45:30 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 19105-01 for ; Wed, 8 Apr 2009 12:45:28 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.kickstone.com (smtp.kickstone.com [87.194.183.70]) by mail.postgresql.org (Postfix) with ESMTP id 79A4E6347B5 for ; Wed, 8 Apr 2009 12:45:28 -0300 (ADT) Received: from madras2.square-pi.com ([192.168.2.131]:1925 helo=MADRAS2) by mail.kickstone.com with esmtpa (Exim 4.69) (envelope-from ) id 1LrZxs-0005Mg-Dm; Wed, 08 Apr 2009 16:45:24 +0100 Message-ID: From: "John Lister" To: "Greg Stark" Cc: "Andrew Chernow" , References: <89DBB5874E89413698A8E275E5E79154@squarepi.com> <4ECCF5BAADF94C5E9FD5CF2FA52CD061@squarepi.com> <49DCBB2F.7040406@esilo.com> <49DCBDBB.9070303@esilo.com> <24AD6A221A5B4B03B87163A772D2F8BB@squarepi.com> <4136ffa0904080835h76463e3bqfc4b87659e78ceed@mail.gmail.com> Subject: Re: Array types Date: Wed, 8 Apr 2009 16:45:24 +0100 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5512 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.001 tagged_above=0 required=5 tests=STOX_REPLY_TYPE=0.001 X-Spam-Level: X-Archive-Number: 200904/448 X-Sequence-Number: 136551 > On Wed, Apr 8, 2009 at 4:11 PM, John Lister > wrote: >> Cheers for the pointers. Am i right in thinking that if i get an array of >> arrays, the nested arrays are sent in wire format as well - it seems to >> be >> from the docs. > > No, you can't easily get an array of arrays in Postgres. You can get > multi-dimensional arrays but that's one big array with multiple > dimensions. The text output form does look like an array of arrays > but they don't behave like you might think they would: Cheers, it wasn't clear if you have an array of arrays of which the nested ones were of a different type. but it looks like all the values have to be the same type, eg select (array[array[1,2,3,4],array['test']]) fails.. this makes life simpler :) >> Secondly, comments are a bit scarse in the code, but am i also right in >> thinking that an array indexing can start at an arbitrary value? This >> seems >> to be what the lbound value is for... or is this a addition to deal with >> nulls eg, {null, null, null, 4} would have a lbound of 3.... (or both) > > No, nulls are handled using a bitmap inside the array data structure. > > Array bounds don't have to start at 1, they can start below 1 or above 1. > > postgres=# select ('[-2:-1][5:8]={{1,2,3,4},{5,6,7,8}}'::int[])[-2][5]; > int4 > ------ Somehow missed the bounds in the docs. Cheers that has cleared that up... JOHN