I do not want to use database's inbuilt features for replication. So I am trying to setup database replication(add
, update
, delete
operation only) at djnago app level.
I have configured multi-db in settings.py
So setting file look like
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config['DB_NAME'],
'USER': config['DB_USER'],
'PASSWORD': config['DB_PASSWORD'],
'HOST': config['DB_HOST'],
'PORT': config['DB_PORT'],
},
'tableau': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'tableau',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'localhost',
'PORT': 5432,
},
}
I am able to read and write from both database like
from myapp.model import People
# writing to db
People.objects.create(name='alok', location='India') # onto defalut db
People.objects.using('tableau').create(name='alok', location='India') # onto replication db
# reading from db
People.objects.filter(name='alok') # from default db
People.objects.using('tableau').filter(name='alok') # from replication db
My requirement is to keep both database in sync(They should have same data). I want to keep both database in sync using djnago signals like django.db.models.signals.post_save
and django.db.models.signals.post_delete
For example if I am running
People.objects.create(name='alok2', location='India2')
Then such entry should get created in other database also.
How to write receiver function to handle these signals? And where should I keep that receiver function?