Re: ON DELETE CASCADE

From: "Marie G(dot) Tuite" <marie(dot)tuite(at)edisonaffiliates(dot)com>
To: "Tim Perdue" <tim(at)perdue(dot)net>, <pgsql-sql(at)postgresql(dot)org>
Subject: Re: ON DELETE CASCADE
Date: 2002-12-12 17:26:24
Message-ID: IGELKLINGDMODABPOOFEAEACCPAA.marie.tuite@edisonaffiliates.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Here is a function that I use to list fk(triggers) on a table. Execute the
function to get the trigger name and then - drop trigger "trigger_name" on
table_name;

hth

-- Version 1.0, June 2002
-- Marie G. Tuite

-- Function lists FK by table.
-- To execute:
-- begin;select fn_list_fk('table_name');
-- fetch all from "<cursor_name>"; end;

create or replace function fn_list_fk(name)
returns refcursor as
'
declare
table_in alias for $1;
rc refcursor;
begin
open rc for
select tgname as trigger_name_sys
,tgconstrname as trigger_name_given
,b.relname as table_name
,tgisconstraint as ri
,c.relname as parent_table
from pg_trigger a,
pg_class b,
pg_class c
where a.tgrelid=b.oid and b.relname=table_in
and tgconstrrelid = c.oid;

return rc;
end;
'
language 'plpgsql'

;

> -----Original Message-----
> From: pgsql-sql-owner(at)postgresql(dot)org
> [mailto:pgsql-sql-owner(at)postgresql(dot)org]On Behalf Of Tim Perdue
> Sent: Thursday, December 12, 2002 11:01 AM
> To: pgsql-sql(at)postgresql(dot)org
> Subject: [SQL] ON DELETE CASCADE
>
>
> I'm trying to comb through my database and add ON DELETE CASCADE to a
> number of tables where I already have fkeys in place, but I'm having a
> hard time.
>
> ALTER TABLE project_task DROP CONSTRAINT
> "project_task_group_project_id_f" RESTRICT;
>
> ERROR: ALTER TABLE / DROP CONSTRAINT: project_task_group_project_id_f
> does not exist
>
> ALTER TABLE project_task
> ADD CONSTRAINT projecttask_groupprojectid_fk
> FOREIGN KEY (group_project_id)
> REFERENCES project_group_list(group_project_id) ON DELETE CASCADE;
> NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY
> check(s)
> ALTER
>
> That command works, but now I think I have 2x as many triggers as I
> want. How do I get rid of the original triggers?
>
>
> alexandria=# \d project_task
> Table "project_task"
> Column | Type | Modifiers
> ------------------+------------------+-----------------------
> project_task_id | integer | not null default
> nextval('project_task_pk_seq'::text)
> group_project_id | integer | not null default '0'
> summary | text | not null default ''
> details | text | not null default ''
> percent_complete | integer | not null default '0'
> priority | integer | not null default '0'
> hours | double precision | not null default '0.00'
> start_date | integer | not null default '0'
> end_date | integer | not null default '0'
> created_by | integer | not null default '0'
> status_id | integer | not null default '0'
> Indexes: projecttask_projid_status
> Primary key: project_task_pkey
> Triggers: RI_ConstraintTrigger_51030049,
> RI_ConstraintTrigger_51030047,
> RI_ConstraintTrigger_4305858,
> RI_ConstraintTrigger_4305852,
> RI_ConstraintTrigger_4305846
>
> After adding the new foreign key:
>
> Triggers: RI_ConstraintTrigger_51364957, ***new
> RI_ConstraintTrigger_51030049,
> RI_ConstraintTrigger_51030047,
> RI_ConstraintTrigger_4305858,
> RI_ConstraintTrigger_4305852,
> RI_ConstraintTrigger_4305846
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Dan Langille 2002-12-12 18:17:28 Re: ON DELETE CASCADE
Previous Message Stephan Szabo 2002-12-12 17:11:08 Re: ON DELETE CASCADE