pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tim Landscheidt <tim@tim-landscheidt.de>
To: pgsql-sql@postgresql.org
Subject: Re: Can i force deletion of dependent rows?
Date: Sat, 13 Feb 2010 22:45:41 +0000
Message-ID: <m3636092lm.fsf@passepartout.tim-landscheidt.de> (raw)
References: <6caee9521002120424l27ec8d3eq3b69522d0a773686@mail.gmail.com>
	<6caee9521002122211q7e4fd2fcj1a0489fd64dc204a@mail.gmail.com>
	<m3fx55linc.fsf@passepartout.tim-landscheidt.de>
	<ef3e5d51002130323j13d32159we970a665ec8a0190@mail.gmail.com>
	<bf54be871002130332h6617b33ateb4dcef3d4213054@mail.gmail.com>
	<6caee9521002130925u46ac27c1u9c0c2f3f202e411f@mail.gmail.com>

Shruthi A <shruthi.iisc@gmail.com> wrote:

> Thanks people, but the trigger doesnt really solve my problem.  You see,
> there is actually a CHAIN of dependencies where B references A, C references
> B, D and E reference C and so on...   So if i start writing triggers for all
> these, there'll be a huge process to follow.  I'm not strictly against it, i
> might use it as a last resort, but i'm asking if a simple DML statement
> would solve my problem.

> Dear Shoaib, I did mention in a note that I don't want to recreate the 2
> tables with the 'on delete cascade' clause.  The tables are ALREADY created
> and populated.  And they are huge.  So i cannot afford to drop and recreate
> them.  I want an option in DML only.  If that is possible that is.

You don't have to drop and recreate them, you could just
temporarily change the foreign key definition (untested):

| BEGIN WORK;
| ALTER TABLE B DROP CONSTRAINT B_z_FKey;
| ALTER TABLE B ADD CONSTRAINT B_z_FKey FOREIGN KEY(z) REFERENCES A(x) ON DELETE CASCADE;
| DELETE FROM A WHERE x = 'your x';
| ALTER TABLE B DROP CONSTRAINT B_z_FKey;
| ALTER TABLE B ADD CONSTRAINT B_z_FKey FOREIGN KEY(z) REFERENCES A(x) ON DELETE NO ACTION;
| COMMIT WORK;

But obviously this is no better than a simple "DELETE FROM B
WHERE z = 'your x';" as you still have to name the dependen-
cy chain yourself.

  You can query the information_schema to build this chain
(e. g. cf.
<URI:http://sqlserver2000.databases.aspfaq.com/schema-how-do-i-find-all-the-foreign-keys-in-a-database.ht...;),
but I would invest more time in rethinking your processes.

Tim




view thread (7+ messages)  latest in thread

Message-ID: <m3636092lm.fsf@passepartout.tim-landscheidt.de>
Permalink:  ../m3636092lm.fsf@passepartout.tim-landscheidt.de/
Also on:    postgresql.org/message-id/m3636092lm.fsf@passepartout.tim-landscheidt.de

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: tim@tim-landscheidt.de
  Subject: Re: Can i force deletion of dependent rows?
  In-Reply-To: <m3636092lm.fsf@passepartout.tim-landscheidt.de>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox