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
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