Temporally disabled foreign key constraint check?

Started by Emi Luover 14 years ago5 messagesgeneral
Jump to latest
#1Emi Lu
emilu@encs.concordia.ca

Good morning,

Is there a way to temporally disabled foreign key constraints something
like:

SET FOREIGN_KEY_CHECKS=0

When population is done, will set FOREIGN_KEY_CHECKS=1

Thanks a lot!
Emi

--
Emi Lu, ENCS, Concordia University, Montreal H3G 1M8
emilu@encs.concordia.ca +1 514 848-2424 x5884

#2raghu ram
raghuchennuru@gmail.com
In reply to: Emi Lu (#1)
Re: Temporally disabled foreign key constraint check?

On Fri, Oct 21, 2011 at 8:33 PM, Emi Lu <emilu@encs.concordia.ca> wrote:

Good morning,

Is there a way to temporally disabled foreign key constraints something
like:

SET FOREIGN_KEY_CHECKS=0

When population is done, will set FOREIGN_KEY_CHECKS=1

You can disable *triggers* on a table (which will disable all the FK
constraints, but not things like 'not nul' or 'unique').

For Disable:

update pg_class set reltriggers=0 where relname = 'TEST';

For Enable:

update pg_class set reltriggers = count(*) from pg_trigger where
pg_class.oid=tgrelid and relname='TEST';

--Raghu

#3Andreas Kretschmer
akretschmer@spamfence.net
In reply to: raghu ram (#2)
Re: Temporally disabled foreign key constraint check?

raghu ram <raghuchennuru@gmail.com> hat am 21. Oktober 2011 um 17:12
geschrieben:

On Fri, Oct 21, 2011 at 8:33 PM, Emi Lu<emilu@encs.concordia.ca>wrote:

Good morning,

Is there a way to temporally disabled foreign key constraints something
like:

SET FOREIGN_KEY_CHECKS=0

When population is done, will set FOREIGN_KEY_CHECKS=1

You can disable *triggers* on a table (which will disable all the FK
constraints, but not things like 'not nul' or 'unique').

For Disable:
update pg_class set reltriggers=0 where relname = 'TEST';
For Enable:
update pg_class set reltriggers = count(*) from pg_trigger where
pg_class.oid=tgrelid and relname='TEST';

 
 
 
No, don't manipulate pg_* - tables. Use instead ALTER TABLE ... DISABLE TRIGGER
...
 
 
Regards, Andreas 

Show quoted text

 
--Raghu 

#4Emi Lu
emilu@encs.concordia.ca
In reply to: raghu ram (#2)
Re: Temporally disabled foreign key constraint check?

Thank you first.

I believe that upate pg_class can only be done by superuser, right?

Besides, if I need the whole schema's foreign keys to be disabled and
then enabled later.

Is there a simple command could do it? Similar to mysql's "set
FOREIGN_KEY_CHECKS = false/true"?

Emi

On 10/21/2011 11:12 AM, raghu ram wrote:

On Fri, Oct 21, 2011 at 8:33 PM, Emi Lu <emilu@encs.concordia.ca
<mailto:emilu@encs.concordia.ca>> wrote:

Good morning,

Is there a way to temporally disabled foreign key constraints
something like:

SET FOREIGN_KEY_CHECKS=0

When population is done, will set FOREIGN_KEY_CHECKS=1

You can disable *triggers* on a table (which will disable all the FK
constraints, but not things like 'not nul' or 'unique').

For Disable:

update pg_class set reltriggers=0 where relname = 'TEST';

For Enable:

update pg_class set reltriggers = count(*) from pg_trigger where
pg_class.oid=tgrelid and relname='TEST';

--Raghu

--
Emi Lu, ENCS, Concordia University, Montreal H3G 1M8
emilu@encs.concordia.ca +1 514 848-2424 x5884

#5raghu ram
raghuchennuru@gmail.com
In reply to: Emi Lu (#4)
Re: Temporally disabled foreign key constraint check?

On Fri, Oct 21, 2011 at 9:19 PM, Emi Lu <emilu@encs.concordia.ca> wrote:

Thank you first.

I believe that upate pg_class can only be done by superuser, right?

Yes,it's requires superuser privileges.

Besides, if I need the whole schema's foreign keys to be disabled and then
enabled later.

Is there a simple command could do it? Similar to mysql's "set
FOREIGN_KEY_CHECKS = false/true"?

No. The main goal for PG is to secure data integrity, and you can't switch
off this feature.

Disable the constraints:

alter table <tablename> disable trigger all;

You can use this command inside your transaction too, but don't forget to
reactivate the triggers because this change will become global after
the transaction ends!
--Raghu

Show quoted text

On 10/21/2011 11:12 AM, raghu ram wrote:

On Fri, Oct 21, 2011 at 8:33 PM, Emi Lu <emilu@encs.concordia.ca
<mailto:emilu@encs.concordia.**ca <emilu@encs.concordia.ca>>> wrote:

Good morning,

Is there a way to temporally disabled foreign key constraints
something like:

SET FOREIGN_KEY_CHECKS=0

When population is done, will set FOREIGN_KEY_CHECKS=1

You can disable *triggers* on a table (which will disable all the FK
constraints, but not things like 'not nul' or 'unique').

For Disable:

update pg_class set reltriggers=0 where relname = 'TEST';

For Enable:

update pg_class set reltriggers = count(*) from pg_trigger where
pg_class.oid=tgrelid and relname='TEST';

--Raghu

--
Emi Lu, ENCS, Concordia University, Montreal H3G 1M8
emilu@encs.concordia.ca +1 514 848-2424 x5884