Как игнорировать триггер внутри другого триггера с помощью django-pgtrigger
Я обновляю tbla."field_2"
из триггера в tblb
. За исключением того, что tbla."field_2"
защищен триггером pgtrigger.ReadOnly
.
Это работает без триггера pgtrigger.ReadOnly
в TblA
. Как мне сделать это и сохранить триггер pgtrigger.ReadOnly
в TblA.field_2
?
Model TblA(models.Model):
field_1 = models.CharField(max_length=20)
field_2 = models.PositiveIntegerField(default=0)
class Meta:
triggers = [
pgtrigger.ReadOnly(
name='read_only_field_2',
fields=['field_2']
)
]
class TblB(models.Model):
field_a = models.ForeignKey(TblA, on_delete=models.SET_NULL)
class Meta:
pgtrigger.Trigger(
func=pgtrigger.Func('''
IF (NEW."{columns[field_a]}" IS NOT NULL) THEN
UPDATE "tbla"
SET "tbla"."field_2" = "tbla"."field_2" + 1
WHERE
"tbla"."id" = NEW.{columns[field_a]}
END IF;
RETURN NEW;
''')
),
when=pgtrigger.Before,
operation=pgtrigger.Insert,
name='increment_tbla_field_2'
),
Я думал имитировать функциональность pgtrigger.ignore()
внутри триггера с помощью set_config
, однако я не очень хорошо знаю, насколько устойчив set_config
.
Нужно ли мне очищать его в конце триггера? Можно ли это сделать?
set_config('pgtrigger.ignore', '{myapp:pgtrigger_read_only_field_2_c8215,pgtrigger_read_only_field_2_c8215}', true)