Postgres "relation not found" после выполнения pg_restore с командой управления Django

Я создаю тестовую базу данных, которую нужно очистить от данных клиентов и синхронизировать с нашей производственной базой данных. Поэтому у меня есть cronjob в Kubernetes, который делает pg_dump, pg_restore, а затем запускает команду управления Django для очистки базы данных.

Дамп и восстановление работают хорошо. Я могу подключиться к нему через psql и увидеть все таблицы. Проблема в том, что команда управления не может найти отношение таблицы (буквально первая строка в сценарии Django), и если я запускаю psql сразу после восстановления, она также не находит таблицу, хотя я печатаю все таблицы, чтобы убедиться.

Все это делается через docker контейнер, в котором есть shell скрипт, который в основном делает дамп, восстановление и выполняет команду (безуспешно), а cronjob подключен к базе данных через Azure pgbouncer (вот почему localhost).

Вот что у меня есть на данный момент:

psql -h localhost -U user -d postgres -c "\i recreate_db.sql"
  • recreate_db.sql: Я использую этот скрипт для закрытия соединений, сброса и воссоздания базы данных для простоты:
SELECT pg_terminate_backend(pid)
    FROM pg_stat_activity
    WHERE datname = 'my_db';
DROP DATABASE my_db;
CREATE DATABASE my_db;
  • Это работает и показывает все таблицы:
psql -h localhost -U user -d my_db -c "SELECT * FROM pg_catalog.pg_tables;"
  • Это не удается, потому что отношение не существует (ту же ошибку я вижу в команде django)
psql -h localhost -U user -d my_db -c "SELECT COUNT(*) FROM myapp_sometable;"
ERROR:  relation "myapp_sometable" does not exist
LINE 1: SELECT COUNT(*) FROM myapp_sometable;

Другие вещи, которые я пробовал:

  • Я изменил сценарий оболочки, чтобы он был просто длинным сном, сделал kubectl exec в pod и запустил оттуда команду управления Django, и это тоже работает!
  • Проверил все учетные данные базы данных
  • Я трижды проверил все переменные env, чтобы убедиться, что они верны
  • Я попробовал запустить контейнер docker, локально подключенный к базе данных, чтобы запустить тот же сценарий оболочки, и он отлично работает

У кого-нибудь есть какие-то соображения на этот счет?

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