容器化Python Django应用连接GCP Postgres报数据库不存在错误
问题根因
配置错误:你将GCP Cloud SQL的实例名称test-instance误填为了业务数据库名称,PostgreSQL实例本身不会自动创建和实例同名的业务库,因此直接抛出数据库不存在的报错。
你用Dbeaver能正常连接,是因为Dbeaver默认会连接实例内置的系统库postgres,并没有连接你配置里写的test-instance库,所以不会触发这个报错。另外你目前仅将本机公网IP加入了GCP SQL的授权列表,容器运行时的出口IP和本机IP不一致,后续就算修正库名也会出现连接被拒绝的问题。
修复步骤
- 确认真实业务库名称
进入GCP Cloud SQL控制台,找到对应实例后打开「数据库」页面,查看已创建的业务数据库名称;如果还未创建业务库,直接在该页面新建自定义名称的业务库即可。 - 修正Django数据库配置
修改settings.py中的数据库连接配置,将NAME字段替换为上一步查到/新建的真实业务库名称,参考配置如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': '替换为你的真实业务库名', 'USER': 'postgres', 'PASSWORD': 'abcder', 'HOST': '35.224.136.9', 'PORT': '5432', } } - 补充网络授权规则
查询容器部署环境的公网出口IP,将该IP段添加到GCP Cloud SQL的「授权网络」列表中,放行容器到数据库的网络访问。 - 验证修复结果
重新构建镜像启动容器,进入容器执行python manage.py migrate命令,无报错即代表连接正常。
注意:GCP Cloud SQL新建的PostgreSQL实例默认仅内置
postgres、template0、template1三个系统库,不存在和实例同名的业务库,必须手动创建业务库后才能正常对接。
内容的提问来源于stack exchange,提问作者sidharth vijayakumar
相关产品推荐
相关产品推荐

