Received: from makus.postgresql.org (makus.postgresql.org [98.129.198.125]) by mail.postgresql.org (Postfix) with ESMTP id CA8C762698A for ; Mon, 16 Apr 2012 05:32:43 -0300 (ADT) Received: from smtp142.dfw.emailsrvr.com ([67.192.241.142]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1SJhMY-0000FL-E0 for pgsql-admin@postgresql.org; Mon, 16 Apr 2012 08:32:43 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp4.relay.dfw1a.emailsrvr.com (SMTP Server) with ESMTP id D0CE43A03B3 for ; Mon, 16 Apr 2012 04:32:29 -0400 (EDT) X-Virus-Scanned: OK Received: by smtp4.relay.dfw1a.emailsrvr.com (Authenticated sender: cernst-AT-zvelo.com) with ESMTPSA id 8B2C23A039B for ; Mon, 16 Apr 2012 04:32:29 -0400 (EDT) Message-ID: <4F8BD91C.6070405@zvelo.com> Date: Mon, 16 Apr 2012 02:32:28 -0600 From: Chris Ernst Organization: Zvelo, Inc. User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120411 Thunderbird/11.0.1 MIME-Version: 1.0 To: pgsql-admin@postgresql.org Subject: Re: Recreate primary key without dropping foreign keys? References: <4F8B6AA1.1040709@zvelo.com> <20120416065717.70a31a6361ac5d7bdad416e8@frank.uvena.de> In-Reply-To: <20120416065717.70a31a6361ac5d7bdad416e8@frank.uvena.de> X-Enigmail-Version: 1.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Pg-Spam-Score: -2.6 (--) X-Archive-Number: 201204/79 X-Sequence-Number: 39415 On 04/15/2012 10:57 PM, Frank Lanitz wrote: > On Sun, 15 Apr 2012 18:41:05 -0600 Chris Ernst > wrote: > >> Hi all, >> >> In PostgreSQL 9.1.3, I have a few fairly large tables with >> bloated primary key indexes. I'm trying to replace them using >> newly created unique indexes as outlined in the docs. Something >> like: >> >> CREATE UNIQUE INDEX CONCURRENTLY dist_id_temp_idx ON >> distributors (dist_id); ALTER TABLE distributors DROP CONSTRAINT >> distributors_pkey, ADD CONSTRAINT distributors_pkey PRIMARY KEY >> USING INDEX dist_id_temp_idx; >> >> However, the initial drop of the primary key constraint fails >> because there are a whole bunch of foreign keys depending on it. >> >> I've done some searching and haven't found a workable solution. >> Is there any way to swap in the new index for the primary key >> constraint without dropping all dependent foreign keys? Or am I >> pretty much stuck with dropping and recreating all of the foreign >> keys? > > REINDEX is not working here? Hi Frank, Thanks, but REINDEX is not an option as it would take an exclusive lock on the table for several hours. For all of the other indexes, I create a new index concurrently, drop the old and swap in the new. But the primary key is a bit trickier because I can't drop the primary key index without dropping the primary key constraint and I can't drop the primary key constraint without dropping all of the foreign keys that reference that column. - Chris