Django测试报错:database 'test_postgres'已存在,如何安全解决?
解决Supabase托管Postgres下测试数据库已存在的问题
绝对不要在Supabase生产实例上执行测试库的删除操作
Supabase托管的数据库属于生产环境,你没有足够权限(也绝对不能)通过测试框架自动操作数据库的创建/删除,极易误删生产数据。优先使用本地轻量数据库做测试(推荐)
如果是Django这类框架,修改项目配置,让测试时自动切换到本地SQLite,完全隔离生产环境:# settings.py import sys from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent # 生产数据库配置(连接Supabase) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', 'USER': '你的Supabase用户名', 'PASSWORD': '你的Supabase密码', 'HOST': '你的Supabase主机地址', 'PORT': '5432', } } # 测试时自动切换到本地SQLite if 'test' in sys.argv: DATABASES['default'] = { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'test_local_db.sqlite3', }配置后运行测试只会操作本地SQLite文件,不会触碰Supabase的任何数据。
若需用Postgres测试,使用独立的测试环境
在Supabase控制台新建一个单独的测试项目,将测试配置指向该项目的数据库信息,测试框架的操作只会影响这个测试项目,和生产数据完全隔离。也可以在本地安装Postgres,测试时连接本地实例。复用已存在的测试数据库
如果你确认test_postgres是之前测试生成的非生产库,运行测试时添加--keepdb参数(以Django为例):python manage.py test --keepdb该参数会复用现有测试库,不会触发删除重建的提示。
内容的提问来源于stack exchange,提问作者Alan m
相关产品推荐
相关产品推荐

