Проблема внешнего ключа в логической репликации postgres в django
Я настроил логическую репликацию postgres между несколькими БД в моем проекте django для репликации общих данных, таких как django_content_types, комментарии и т.д. из первичной БД в периферийные БД. При этом нет ведущей или ведомой БД, потому что данные из периферийных БД также реплицируются в первичную БД. Я называю ее первичной, потому что в ней хранятся основные данные. И я использую приложение django-viewflow, поэтому экземпляры приложения viewflow читаются из первичной БД. Но у меня есть модели, унаследованные от моделей django-viewflow, и они читаются из других БД. Система выглядит следующим образом:
class Process(models.Model): # django-viewflow model, read from primary
class SomeProcess(Process): # inherited model, read and written into another DB
Также есть модель Task, которая имеет внешний ключ к process и самоссылающееся поле "previous", и есть таблица viewflow_task_previous, которая имеет task_ids, как это:
class Task(models.Model):
process = models.ForeignKey(Process, on_delete=models.CASCADE, verbose_name=_('Process'))
previous = models.ManyToManyField('self', symmetrical=False, related_name='leading',
verbose_name=_('Previous'))
Естественно я использую маршрутизаторы django. Проблема в том, что когда объект задачи создается в периферийной БД, он реплицируется в основную, но таблица viewflow_task_previous читается только из основной БД, поэтому иногда данные задачи не успевают реплицироваться в основную БД и возникает IntegrityError с сообщением:
insert or update on table "viewflow_task_previous" violates foreign key constraint "viewflow_task_previous_to_task_id_fk_viewflow_task_id"
DETAIL: Key (to_task_id)=(some id) is not present in table "viewflow_task".
Это случается редко, но случается. Есть ли способ предотвратить это?