Re: how to disable all pkey/fkey constraints globally

From: salah jubeh <s_jubeh(at)yahoo(dot)com>
To: Joe Abbate <jma(at)freedomcircle(dot)com>
Cc: pgsql <pgsql-general(at)postgresql(dot)org>
Subject: Re: how to disable all pkey/fkey constraints globally
Date: 2011-10-05 14:40:47
Message-ID: 1317825647.41454.YahooMailNeo@web161508.mail.bf1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Create a temp table that will store all the foreign kez constraints 
then create a function that add an entry to this table 
then write a plpgsql function that reads the constraints and disable them 
write another function to read the constraints from the temporary tables and create them again 

have a look on pg_constraints , pg_tables 
 
regards

________________________________
From: Joe Abbate <jma(at)freedomcircle(dot)com>
To: pgsql-general(at)postgresql(dot)org
Sent: Wednesday, October 5, 2011 11:27 AM
Subject: Re: [GENERAL] how to disable all pkey/fkey constraints globally

On 10/05/2011 04:49 AM, depstein(at)alliedtesting(dot)com wrote:
>> -----Original Message-----
>> From: pgsql-general-owner(at)postgresql(dot)org [mailto:pgsql-general-
>> owner(at)postgresql(dot)org] On Behalf Of J.V.
>> Sent: Tuesday, October 04, 2011 10:00 PM
>> To: pgsql-general
>> Subject: [GENERAL] how to disable all pkey/fkey constraints globally
>>
>> Is there a generic way to drop just all primary key and foreign key constraints
>> on a given table?
>>
>> I know how to do given the specific name of the constraint.
>>
>> same question but one statement that would just disable all primary key and
>> foreign key constraints on a given database?
>>
>> and am assuming the reverse could not be done because would have to re-
>> create each one individually?
>>
>> Maybe I do not want to drop, so is there a way to simply disable all globally
>> (not drop) & then enable all globally?
>>
>
> You can find all foreign key constraints for a given table, save
> constraint definitions, drop constraints, and later re-enable them.
> Look into table pg_constraint and function pg_get_constraintdef.

If you'll allow me to toot my horn, here's an alternative:

- Use dbtoyaml [1] to output your tables to a file, say, yaml1
- Edit the yaml1 file, searching for primary_key and foreign_keys and
remove those you want to drop, save the result to a different file, say,
yaml2
- Use yamltodb [2] with yaml2 to generate SQL to drop the primary keys
and foreign keys, in the correct dependency order (at least that's what
it's supposed to do, make sure you use the -1 option), to a file, say, sql1
- Run sql1 through psql to drop the constraints
- Use yamltodb with yaml1 to generate SQL to recreate the primary keys
and foreign keys to, say sql2
- Run sql2 through psql to recreate the constraints

Regards,

Joe

[1] http://www.pyrseas.org/docs/dbtoyaml.html
[2] http://www.pyrseas.org/docs/yamltodb.html

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Filip Rembiałkowski 2011-10-05 14:50:56 Re: Restoring 2 Tables From All Databases Backup
Previous Message Tom Lane 2011-10-05 14:39:14 Re: null values in a view