Обсуждение: ALTER TABLE ... DISABLE TRIGGERS Isolation leve

Поиск
Список
Период
Сортировка

ALTER TABLE ... DISABLE TRIGGERS Isolation leve

От
CG
Дата:
I'm using 8.4.1

I want to add a column to a table, but there are update triggers that will fire that don't need to fire for this
operation.So, I'd like to add the column with triggers off. Normally this operation would take 10 or so seconds, so
lockingthe table for that amount of time is not a big deal. I just want to make sure that no new data gets written to
thetable while the triggers are disabled. 

BEGIN;
ALTER TABLE foo ADD COLUMN bar DISABLE TRIGGER USER;
COMMIT;

seems to leave the triggers disabled.

My tests seem to show that


BEGIN;
ALTER TABLE foo DISABLE TRIGGER USER;

locks the table fully, then

ALTER TABLE foo ADD COLUMN bar;
ALTER TABLE foo ENABLE TRIGGER USER;
COMMIT;

gets the job done. I only pause because I figured that the single DISABLE triggerin transaction would have flopped back
whenthe transaction committed. I was wrong about that.... I only need a little bit of affirmation or a kick in the
rightdirection. 

Thanks folks.

Re: ALTER TABLE ... DISABLE TRIGGERS Isolation leve

От
Tom Lane
Дата:
CG <cgg007@yahoo.com> writes:
> I want to add a column to a table, but there are update triggers that will fire that don't need to fire for this
operation.So, I'd like to add the column with triggers off. Normally this operation would take 10 or so seconds, so
lockingthe table for that amount of time is not a big deal. I just want to make sure that no new data gets written to
thetable while the triggers are disabled. 

Are you overthinking the problem?  Adding a column without a default
doesn't do any row updates and shouldn't fire any triggers.  I'm not
sure that adding a column *with* a default will fire update triggers
either.  (That might be a bug, if so ...)

Suggest testing before assuming you have a problem to solve.

            regards, tom lane