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

本地通过Python连接Heroku Postgres数据库失败该如何解决?

问题根源

  • 你执行的set DATABASE_URL=postgres://$(whoami)是Unix系shell(Bash/Zsh等)的语法,$(whoami)属于命令替换表达式,Windows的cmd/PowerShell默认不支持该语法,所以会把$(whoami)直接作为字符串赋值给环境变量,导致连接数据库时无法解析主机名。
  • 官方教程里的本地环境变量配置示例默认针对Unix开发环境,且该配置是用于连接本地安装的PostgreSQL实例,不是直接连接Heroku云端的Postgres数据库。Heroku线上的DATABASE_URL是平台自动注入的,和本地手动配置的没有关系,线上运行正常就是因为平台自动填充了有效的地址值。

修复方案

方案1:本地直接连接Heroku云端Postgres(无需本地安装数据库)

你可以通过Heroku CLI自动拉取最新的数据库凭证,不需要手动复制后台的地址:

  1. 首先确保你已经登录Heroku CLI,且当前目录关联了你的Heroku应用
  2. 启动本地服务前先执行命令拉取最新的DATABASE_URL:
    • Unix系系统(Mac/Linux):
      export DATABASE_URL=$(heroku config:get DATABASE_URL -a 你的Heroku应用名)
    • Windows cmd:
      for /f "delims=" %a in ('heroku config:get DATABASE_URL -a 你的Heroku应用名') do set DATABASE_URL=%a
    • Windows PowerShell:
      $env:DATABASE_URL = heroku config:get DATABASE_URL -a 你的Heroku应用名
  3. 再执行heroku local启动即可,每次启动前执行上述命令就能自动获取最新的凭证,不需要手动复制。

方案2:本地使用自己安装的PostgreSQL实例

如果你要在本地开发用本地数据库,只需要按照你本地PostgreSQL的配置修改环境变量即可:

  • 把DATABASE_URL的值替换为你本地PostgreSQL的连接地址,格式为postgres://本地数据库用户名:本地数据库密码@localhost:5432/本地数据库名
  • 本地连接不需要加sslmode='require',你可以加个环境判断优化代码兼容性:
import os
import psycopg2

DATABASE_URL = os.environ['DATABASE_URL']
# 本地开发用本地数据库时关闭ssl,云端环境自动保留ssl配置
if 'localhost' in DATABASE_URL or '127.0.0.1' in DATABASE_URL:
    connection = psycopg2.connect(DATABASE_URL)
else:
    connection = psycopg2.connect(DATABASE_URL, sslmode='require')
cursor = connection.cursor()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:06:02