Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 40F63633138 for ; Mon, 29 Jun 2009 05:02:39 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 12125-04 for ; Mon, 29 Jun 2009 05:02:35 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.187]) by mail.postgresql.org (Postfix) with ESMTP id BB723632824 for ; Mon, 29 Jun 2009 05:02:35 -0300 (ADT) Received: from webserv.wug.de ([194.25.154.138]) by mrelayeu.kundenserver.de (node=mreu1) with ESMTP (Nemesis) id 0MKv1o-1MLBov13yY-000cxk; Mon, 29 Jun 2009 10:02:34 +0200 Received: from kretschmer by webserv.wug.de with local (Exim 3.36 #1) id 1MLBou-0001f9-00 for pgsql-sql@postgresql.org; Mon, 29 Jun 2009 10:02:32 +0200 Date: Mon, 29 Jun 2009 10:02:32 +0200 From: "A. Kretschmer" To: pgsql-sql@postgresql.org Subject: Re: uniqueness constraint with NULLs Message-ID: <20090629080232.GF24737@a-kretschmer.de> References: <4A485431.3080707@cs.anu.edu.au> <20090629062602.GB24737@a-kretschmer.de> <4A486872.5060906@cs.anu.edu.au> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A486872.5060906@cs.anu.edu.au> X-OS: Debian/GNU Linux - weil ich es mir Wert bin! User-Agent: Mutt/1.5.9i X-Provags-ID: V01U2FsdGVkX1+WtldPLQMl8OH0DyM79ngzJ+kinDyf5NkiK1K j5xzXSfAdeog0RBIFNgFqOeemHGepKGJpE4mQP4bdAw7KpP/nL e8gcmIwbLTdUXtza+yl2Q== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200906/117 X-Sequence-Number: 32722 In response to Robert Edwards : > A. Kretschmer wrote: > >In response to Robert Edwards : > >>Can anyone suggest a way that I can impose uniqueness on a and b when > >>c is NULL? > > > >Sure, use a functional index: > > > >test=# create table bobtest (a int, b int, c int); > >CREATE TABLE > >test=*# create unique index idx_bobtest on > >bobtest(a,b,coalesce(c::text,'NULL')); > >CREATE INDEX > >test=*# insert into bobtest (a, b) values (1, 4); > >INSERT 0 1 > >test=*# insert into bobtest (a, b, c) values (1, 4, NULL); > >ERROR: duplicate key value violates unique constraint "idx_bobtest" > >test=!# > > > > > >Regards, Andreas > > Beautiful! Btw: if your data doesn't contains 0 or negative, you can use coalesce(c,0) or coalesce(c,-1). It would be better for searching. Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net