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, локально подключенный к базе данных, чтобы запустить тот же сценарий оболочки, и он отлично работает
У кого-нибудь есть какие-то соображения на этот счет?