You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DigitalOcean托管PostgreSQL数据库创建后无法连接求助

解决DigitalOcean托管Postgres连接池切换数据库失败及SSL问题

问题根源分析

  1. 事务级连接池限制:DigitalOcean默认推荐的连接池是事务级,这类连接池会复用数据库连接,且每个连接固定绑定到初始连接的数据库,不支持\c切换数据库操作——这就是你创建数据库后却提示no such database的核心原因。
  2. SSL参数未继承:\c命令不会自动继承初始连接的SSL配置,切换时如果未显式指定SSL参数,就会触发SSL required错误。

分步解决方案

1. 直接连接目标数据库(推荐)

放弃先连初始库再切换的方式,直接用完整连接字符串指定新数据库:

psql "host=[连接池VPC地址] port=25061 dbname=new_database_name user=doadmin password=[你的密码] sslmode=require"

2. 若需切换数据库,修改连接池模式

如果必须通过\c切换数据库,需将连接池改为会话级(注意:会话级连接池性能低于事务级,适合长连接场景):

  • 登录DigitalOcean控制台,进入数据库集群的「连接池」页面
  • 找到目标连接池,修改「连接模式」为「会话级」
  • 重启连接池后,即可使用\c new_database_name切换(仍需确保SSL配置)

3. 解决SSL required错误

  • 切换数据库时显式携带SSL参数:
    \c "dbname=new_database_name host=[连接池VPC地址] port=25061 user=doadmin password=[你的密码] sslmode=require"
    
  • 或者在Droplet的~/.psqlrc中添加默认SSL配置,避免每次手动指定:
    echo '\set sslmode require' >> ~/.psqlrc
    

4. 确保Django应用正常连接

在Django的settings.py中配置完整的数据库参数,强制启用SSL:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'new_database_name',
        'USER': 'doadmin',
        'PASSWORD': '你的数据库密码',
        'HOST': '连接池VPC地址',
        'PORT': '25061',
        'OPTIONS': {
            'sslmode': 'require',
        },
    }
}

5. 验证UFW规则

确认Droplet的UFW允许VPC内的25061端口出站流量:

# 替换为你的数据库集群VPC网段
ufw allow out to 10.x.x.x/24 port 25061 proto tcp

验证步骤

  1. 用完整连接字符串直接连接新数据库,确认能成功进入psql提示符
  2. 运行Django命令验证连接:
    python manage.py dbshell
    
    若能进入新数据库的psql环境,说明配置正常;也可执行python manage.py migrate测试数据迁移是否正常。

内容的提问来源于stack exchange,提问作者Tuffgong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:44:10