![](/img/trans.png)
[英]Django + Postgres: Trying dump and restore database, but are seeing ERROR: relation “*_id_seq” does not exist for all sequence tables
[英]Error in Kubernetes cronjob to dump and restore postgres database for Django application
我需要為特定團隊創建一個測試環境,以使用我們的 Django 應用程序對數據庫進行測試。 該數據庫必須與生產數據庫有點同步。 考慮到我們有兩個集群production
和staging
,我的方法如下:
db_test
db_test
將定期與db_prod
同步。 這樣做:staging
集群中創建一個 cronjob,執行pg_dump
,然后對db_test
執行pg_restore
(使用localhost
因為它是通過 pgbouncer 連接的)。期望的行為:
pg_dump
和pg_restore
成功,新數據庫清除客戶信息實際行為:
pg_dump
和pg_restore
成功。 我可以psql
進入新創建的數據庫,一切看起來都很好。migrate
命令失敗,回溯如下clean_db
失敗,因為它找不到一些表(它們在我用psql
檢查時存在。這是我在 cronjob 中運行的簡單 shell 腳本:
#!/bin/bash
# Dump the database locally
pg_dump --host=mydb.postgres.database.azure.com \
--username=myuser@production \
--no-owner \
--verbose \
-Ft db_prod > $HOME/db_prod-$(date +%F).tar &&
sleep 30 &&
# Restore the database
pg_restore --no-owner \
--no-acl \
--host='localhost' \
--user=myuser@staging \
--port=5432 \
--clean \
--dbname=db_test \
$HOME/db_prod-$(date +%F).tar \
--verbose &&
python manage.py migrate &&
python manage.py clean_db
migrate
的clean_db
的錯誤relation "uploader_somemodel" does not exist
2
LINE 1: SELECT COUNT(*) AS "__count" FROM "uploader_somemodel...
但這是正在創建的表的日志
pg_restore: processing data for table "public.uploader_somemodel"```
migrate
命令的錯誤日志Running all migrations...
Operations to perform:
Apply all migrations: admin, auth, axes, contenttypes, django_mfa, myapp, reversion, sessions, uploader, userapi
Running migrations:
Traceback (most recent call last):
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 67, in ensure_schema
editor.create_model(self.Migration)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 307, in create_model
self.execute(sql, params or None)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 137, in execute
cursor.execute(sql, params)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/opt/venv/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 82, in _execute
return self.cursor.execute(sql)
django.db.utils.ProgrammingError: no schema has been selected to create in
LINE 1: CREATE TABLE "django_migrations" ("id" serial NOT NULL PRIMA...
^
有沒有人遇到過類似的錯誤並知道這是怎么回事? 或者更好的是,您對我如何以不同的方式執行此操作有什么建議嗎?
您是否更改了 env 變量中數據庫的名稱? 要在您的 django settings.py 中獲得此結果:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': db_test,
'USER': POSTGRES_USER,
'PASSWORD': POSTGRES_PASSWORD,
'HOST': POSTGRES_HOST,
'PORT': 5432,
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.