add command to synchronize db sequences
This commit is contained in:
parent
7d9599d4d8
commit
dc1daf0a2d
|
@ -16,3 +16,4 @@ class Command(BaseCommand):
|
|||
call_command('import_activities', chunk=5000, map="map.json")
|
||||
call_command('import_transaction', chunk=5000, buttons=True, map="map.json")
|
||||
call_command('make_su','-sS', 'Coq', 'erdnaxe', 'PAC', 'Pollion', 'ÿnérant')
|
||||
call_command('syncsql')
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.apps import apps
|
||||
from django.db import connection
|
||||
|
||||
|
||||
from polymorphic.models import PolymorphicModel
|
||||
|
||||
NO_SEQ = [
|
||||
"Session",
|
||||
"Token",
|
||||
"WEIRole", # dirty fix
|
||||
]
|
||||
|
||||
class Command(BaseCommand):
|
||||
"""
|
||||
Command to synchronise primary sequence of postgres after bulk insert of django.
|
||||
"""
|
||||
|
||||
def add_arguments(self,parser):
|
||||
parser.add_argument('apps', type=str,nargs='*',help='applications which table would be resynchronized')
|
||||
return parser
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
app_list = kwargs["apps"]
|
||||
if len(app_list):
|
||||
model_classes = list()
|
||||
for app in app_list:
|
||||
model_classes += apps.get_app_config(app).get_models()
|
||||
else:
|
||||
# no app specified, sync everything
|
||||
model_classes = apps.get_models(include_auto_created=True)
|
||||
|
||||
db_names = [ m._meta.db_table for m in model_classes if m.__base__.__base__ is not PolymorphicModel and m.__name__ not in NO_SEQ and m.objects.count()>1]
|
||||
com = "BEGIN;\n"
|
||||
for db_name in db_names:
|
||||
com += f'SELECT setval(pg_get_serial_sequence(\'"{db_name}"\',\'id\'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "{db_name}";\n'
|
||||
com += "COMMIT;"
|
||||
print(com)
|
||||
cur = connection.cursor()
|
||||
cur.execute(com)
|
||||
cur.close()
|
Loading…
Reference in New Issue