Проблема внешнего ключа в логической репликации 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".

Это случается редко, но случается. Есть ли способ предотвратить это?

Вернуться на верх