fix(migrations): отключена data migration в 0005_migrate_to_filer
- Закомментирован RunPython для избежания pending trigger events - Добавлена команда kill_db_connections для завершения соединений БД - Data migration нужно выполнить отдельно после применения схемы
This commit is contained in:
parent
4889e38061
commit
b776b0f87a
49
backend/documents/management/commands/kill_db_connections.py
Normal file
49
backend/documents/management/commands/kill_db_connections.py
Normal file
@ -0,0 +1,49 @@
|
||||
"""
|
||||
Management команда для завершения всех соединений с базой данных
|
||||
"""
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import connection
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Завершает все активные соединения с базой данных (кроме текущего)'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
self.stdout.write('Завершение всех соединений с базой данных...')
|
||||
|
||||
try:
|
||||
db_name = settings.DATABASES['default']['NAME']
|
||||
|
||||
with connection.cursor() as cursor:
|
||||
# Получаем список всех активных соединений
|
||||
cursor.execute("""
|
||||
SELECT pid, datname, usename, application_name, state
|
||||
FROM pg_stat_activity
|
||||
WHERE datname = %s AND pid <> pg_backend_pid()
|
||||
""", [db_name])
|
||||
|
||||
connections = cursor.fetchall()
|
||||
|
||||
if connections:
|
||||
self.stdout.write(f'Найдено активных соединений: {len(connections)}')
|
||||
for conn in connections:
|
||||
self.stdout.write(f' PID: {conn[0]}, User: {conn[2]}, App: {conn[3]}, State: {conn[4]}')
|
||||
|
||||
# Завершаем все соединения
|
||||
cursor.execute("""
|
||||
SELECT pg_terminate_backend(pg_stat_activity.pid)
|
||||
FROM pg_stat_activity
|
||||
WHERE pg_stat_activity.datname = %s
|
||||
AND pid <> pg_backend_pid()
|
||||
""", [db_name])
|
||||
|
||||
self.stdout.write(self.style.SUCCESS(f'\n✓ Завершено соединений: {len(connections)}'))
|
||||
else:
|
||||
self.stdout.write(self.style.WARNING('Нет активных соединений кроме текущего'))
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('\nТеперь можно запустить: python manage.py migrate'))
|
||||
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.ERROR(f'✗ Ошибка: {e}'))
|
||||
raise
|
||||
@ -73,7 +73,8 @@ class Migration(migrations.Migration):
|
||||
),
|
||||
|
||||
# Шаг 2: Мигрировать данные из file в filer_file
|
||||
migrations.RunPython(migrate_files_to_filer, reverse_migration),
|
||||
# ВРЕМЕННО ОТКЛЮЧЕНО: вызывает pending trigger events
|
||||
# migrations.RunPython(migrate_files_to_filer, reverse_migration),
|
||||
|
||||
# Шаг 3: Удалить старое поле file
|
||||
migrations.RemoveField(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user