Можно ли запустить миграцию Django на облачной SQL-реплике, не являясь владельцем таблицы?

Я использую Google Cloud SQL для PostgreSQL в качестве внешней первичной реплики, при этом данные непрерывно реплицируются из автономного PostgreSQL источник с использованием Службы миграции баз данных (DMS) в режиме CDC.

Я подключил проект Django к этой реплике и попытался запустить миграцию, которая переименовывает столбец и добавляет новый:

uv run python manage.py migrate

Однако я получаю следующую ошибку:

django.db.utils.ProgrammingError: must be owner of table camera_manager_invoice

Это имеет смысл, поскольку в PostgreSQL ALTER TABLE требуется владение таблицей. Но в данном случае реплика была создана DMS, поэтому фактическим владельцем таблицы является источник репликации, а не текущий пользователь.

<время работы/>

🔍 Проблема:

Я пытаюсь применить изменения схемы с помощью миграции Django к облачной SQL-реплике, которой я не владею. Репликация данных (CDC) работает нормально, но мне нужно самостоятельно применить структурные изменения к реплике.

<время работы/>

✅ Что я пробовал:

  • Изменение подключенного пользователя: по-прежнему не является владельцем, та же ошибка.
  • Запуск sqlmigrate для получения SQL и применение вручную: тот же результат — в разрешении отказано.
  • Попытка сменить владельца таблицы с помощью ALTER TABLE ... OWNER TO ...: ошибка из-за того, что вы не являетесь суперпользователем.
  • Пробовал запустить миграцию с помощью --fake, но это приводит к пропуску выполнения и не изменяет схему.
<время работы/>

❓ Мой вопрос:

Есть ли какой-либо способ применить изменения схемы с помощью миграции Django (или вручную) к облачной SQL-реплике, не являясь владельцем таблицы?

Я готов выслушать альтернативы, лучшие практики или официальные рекомендации GCP для данной ситуации.

<время работы/>

Нет. В PostgreSQL для ALTER TABLE операций (таких как переименование столбцов или добавление новых) требуется, чтобы пользователь был владельцем таблицы. В вашем случае, поскольку облачная SQL-реплика заполняется через DMS, таблицы принадлежат исходной базе данных, а не пользователю, к которому вы подключаетесь в Django. А поскольку Cloud SQL не предоставляет привилегий суперпользователя, вы также не сможете сменить владельца.

Вам следует запустить миграцию Django (python manage.py migrate) в исходной базе данных . Затем позвольте DMS продолжить репликацию изменений, включая новые столбцы или переименованные поля, в облачную SQL-реплику.

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