【问题标题】:Cannot access local postgreSQL heroku, node.js无法访问本地 postgreSQL heroku、node.js
【发布时间】:2015-10-23 16:22:10
【问题描述】:

使用 postgreSQL db 设置 node.js 应用程序,所有工作在生产环境中。

我使用了成功的 CLI heroku pg:pull ...。我在本地运行 postgres 9.4.X,但是在本地启动我的应用程序(工头启动)时出现错误:“错误错误:关系“test_table”不存在”。我已按照此处的说明进行操作:https://devcenter.heroku.com/articles/heroku-postgresql#local-setup 但在本地运行时我似乎仍然无法访问我的数据库。

bash_profile:

export PATH="/usr/local/heroku/bin:$PATH"
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH:$PATH"

控制台错误日志:

15:39:48 web.1 | started with pid 18779
15:39:48 web.1 | Node app is running on port 5000
15:39:52 web.1 | { [error: relation "test_table" does not exist]
15:39:52 web.1 | name: 'error',
15:39:52 web.1 | length: 101,
15:39:52 web.1 | severity: 'ERROR',
15:39:52 web.1 | code: '42P01',
15:39:52 web.1 | detail: undefined,
15:39:52 web.1 | hint: undefined,
15:39:52 web.1 | position: '15',
15:39:52 web.1 | internalPosition: undefined,
15:39:52 web.1 | internalQuery: undefined,
15:39:52 web.1 | where: undefined,
15:39:52 web.1 | schema: undefined,
15:39:52 web.1 | table: undefined,
15:39:52 web.1 | column: undefined,
15:39:52 web.1 | dataType: undefined,
15:39:52 web.1 | constraint: undefined,
15:39:52 web.1 | file: 'parse_relation.c',
15:39:52 web.1 | line: '986',
15:39:52 web.1 | routine: 'parserOpenTable' }

【问题讨论】:

  • 创建test_table?数据库是如何使用模式播种/导入/设置的?
  • 您可能连接到错误的数据库。您能否显示您的应用程序配置使用的连接字符串,以及您使用的完整 pg:pull 命令?另外,如果你使用 postgresql 'psql' 命令连接到数据库,那么你能看到表吗?
  • pg.connect(process.env.DATABASE_URL, function(err, client, done){..... 我不记得我使用的确切 pg:pull,但我应该使用什么来确保它有效?本地 psql \conninfo 是 You are connected to database "Oliver" as user "Oliver" via socket in "/tmp" at port "5432".

标签: javascript ruby-on-rails node.js postgresql heroku


【解决方案1】:

根据heroku docs,您提供给pg:pull 的第二个参数是将在本地创建以包含应用程序数据副本的数据库的名称。如果您使用 heroku 网站上给出的示例:

 heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi

然后数据将被转储到名为“mylocaldb”的本地数据库中。

根据 cmets,您的应用程序使用环境变量 DATABASE_URL 的内容作为连接字符串。

既然你说pg:pull 工作了,但是你的应用程序找不到应该存在于数据库中的表,我猜你的应用程序连接到了错误的数据库。如果您盲目地遵循 heroku 文档,您可能已经这样做了:

export DATABASE_URL=postgres:///$(whoami)

该连接字符串会将您连接到与您的用户名相同的数据库。这可能不是您在pg:pull 命令中使用的名称。

要确定正确的数据库名称是什么,请查看您的命令历史记录以查找在 pg:pull 中使用的名称,或者使用 psql 中的 \l 命令列出所有可用的数据库。然后更新环境变量为

export DATABASE_URL=postgres:///dbname

其中 dbname 将是实际名称。

在 postgresql 连接字符串中可以使用许多其他可能的参数(实际上您可以使用多种不同的格式)。有关这些的更多信息,请参阅the postgresql manual

【讨论】:

  • 好吧,当你这么说的时候,简单。我只是没有导出正确的数据库名称。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 2012-07-27
  • 2018-07-12
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
相关资源
最近更新 更多