X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.193]) by svr1.postgresql.org (Postfix) with ESMTP id 97B2330FB93 for ; Tue, 10 Jun 2003 08:49:48 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (svr1.postgresql.org [64.117.224.193]) (amavisd-new, port 10024) with ESMTP id 60099-02 for ; Tue, 10 Jun 2003 05:49:37 -0300 (ADT) Received: from matrix.gatewaynet.com (unknown [217.19.69.50]) by svr1.postgresql.org (Postfix) with ESMTP id 4877F311143 for ; Tue, 10 Jun 2003 04:20:38 -0300 (ADT) Received: from matrix.gatewaynet.com (localhost [127.0.0.1]) by matrix.gatewaynet.com (8.12.5/8.12.5) with ESMTP id h5ACW1EP005891; Tue, 10 Jun 2003 10:32:01 -0200 Received: from localhost (achill@localhost) by matrix.gatewaynet.com (8.12.5/8.12.5/Submit) with ESMTP id h5ACW04r005885; Tue, 10 Jun 2003 10:32:00 -0200 Date: Tue, 10 Jun 2003 10:32:00 -0200 (GMT+2) From: Achilleus Mantzios To: Forest Wilkinson Cc: pgsql-sql@postgresql.org Subject: Re: how to determine array size In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Archive-Number: 200306/78 X-Sequence-Number: 13836 On Mon, 9 Jun 2003, Forest Wilkinson wrote: > I need to enumerate the constraints on any given column in a table, so > I'm examining pg_constraint to get the relevant information. The > conkey array contains a list of constrained columns, and although I am > able to check conkey[1] for constraints on a single column, I would > like to properly handle multi-column constraints. > > How do I determine the size of the conkey array? I haven't found any > field that looks like it contains the number of values in conkey. Do > I have to check each element of the array sequentially, until I get a > NULL value from one of them? (Section 5.12 of the User's Guide seems > to forbid this: "A limitation of the present array implementation is > that individual elements of an array cannot be SQL null values.") > Moreover, that method doesn't give me a nice way of selecting all > constraints on a specific column, as I would have to write clauses > like this: > > ... WHERE conkey[1] = blah OR conkey[2] = blah OR conkey[3] = blah OR > conkey[4] = blah ... > > Can somone offer a better way? Well if you are willing to extend contrib package intarray to something like smallintarray you could simply do SELECT conname from pg_constraint where conrelid= and '{blah}' ~ conkey; Or as a quick solution create your own function boolean isinarr(smallint,smallint[]) that performs this task, and do SELECT conname from pg_constraint where conrelid= and isinarr(blah,conkey); > > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faqs/FAQ.html > -- ================================================================== Achilleus Mantzios S/W Engineer IT dept Dynacom Tankers Mngmt Nikis 4, Glyfada Athens 16610 Greece tel: +30-210-8981112 fax: +30-210-8981877 email: achill at matrix dot gatewaynet dot com mantzios at softlab dot ece dot ntua dot gr