How to add “on delete cascade” constraints?

前端 未结 3 646
无人共我
无人共我 2020-11-28 02:55

In PostgreSQL 8 is it possible to add ON DELETE CASCADES to the both foreign keys in the following table without dropping the latter?

# \\d scor         


        
3条回答
  •  爱一瞬间的悲伤
    2020-11-28 03:30

    I'm pretty sure you can't simply add on delete cascade to an existing foreign key constraint. You have to drop the constraint first, then add the correct version. In standard SQL, I believe the easiest way to do this is to

    • start a transaction,
    • drop the foreign key,
    • add a foreign key with on delete cascade, and finally
    • commit the transaction

    Repeat for each foreign key you want to change.

    But PostgreSQL has a non-standard extension that lets you use multiple constraint clauses in a single SQL statement. For example

    alter table public.scores
    drop constraint scores_gid_fkey,
    add constraint scores_gid_fkey
       foreign key (gid)
       references games(gid)
       on delete cascade;
    

    If you don't know the name of the foreign key constraint you want to drop, you can either look it up in pgAdminIII (just click the table name and look at the DDL, or expand the hierarchy until you see "Constraints"), or you can query the information schema.

    select *
    from information_schema.key_column_usage
    where position_in_unique_constraint is not null
    

提交回复
热议问题