【问题标题】:How do I connect to a postgres database with Sequel?如何使用 Sequel 连接到 postgres 数据库?
【发布时间】:2012-08-21 12:07:27
【问题描述】:

当我意识到他们支持的唯一数据库类型是 PostgreSQL 时,我正在使用 Heroku.com 制作一个要部署的 Web 应用程序。到目前为止,我的应用程序(由 Ruby gem Sinatra 提供支持)通过 Sequel gem 的 .Sqlite 方法访问数据库。

这是我使用 Sequel 通过 SQLite 访问 .db 文件时的 Ruby 脚本:

DB = Sequel.sqlite('mydatabase.db')
DB.create_table :mytable do
  primary_key :id
  String :column_name
end


在得知 Heroku 只使用了 PostgreSQL 之后,我安装了 PostgreSQL。这是通过 postgres 编写的脚本(我的用户名实际上是“postgress”,尽管我显然不会在这个问题中透露我的密码):

DB = Sequel.postgres('mydatabase.db',:user=>'postgres',:password=>'my_password_here',:host=>'localhost',:port=>5432,:max_connections=>10)
DB.create_table :mytable do
  primary_key :id
  String :column_name 
end

但是,当我运行此代码时,我收到以下错误:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/sequel-3.38.0/lib/sequel/adapters/postgres.rb:208:in 'initialize': PG::Error: FATAL: database "mydatabase.db" does not exist (Sequel::DatabaseConnectionError)

我尝试在 Google、StackOverflow、Sequel 文档和 Heroku 帮助文档中搜索任何帮助,但没有找到解决此问题的方法。

有谁知道我做错了什么?

【问题讨论】:

    标签: ruby sqlite postgresql heroku sequel


    【解决方案1】:

    根据 Pg 的错误消息,数据库 mydatabase.db 不存在。可能的原因:

    • 您的意思可能是 mydatabase 没有特定于 SQLite 的 .db 文件名后缀
    • 您创建的数据库可能有不同的大小写,例如"Mydatabase.db";
    • 您连接的 Pg 服务器可能与您想象的不同
    • 你永远不会created the database。与 SQLite 的默认行为不同,当您尝试连接到尚不存在的数据库时,Pg 不会创建数据库。

    如果有疑问,请使用psql 连接到 Pg 并运行 \l 以列出数据库,或通过 PgAdmin-III 连接。

    强烈推荐使用 PostgreSQL documentationtutorial。它们写得很好,会教你很多关于一般 SQL 以及特别是 Pg 的知识。

    顺便说一句,postgres 用户是超级用户。您不应该将它用于您的应用程序;这就像以 root 身份运行您的服务器,即一个非常糟糕的主意。创建一个没有超级用户、createdb 或 createuser 权限的新 PostgreSQL 用户,并将其用于您的应用程序。您可以CREATE DATABASE somedb WITH OWNER myappuser - 或者最好为您的 webapp 用户创建由不同用户拥有的数据库,然后明确地 GRANT webapp 用户获得所需的最低权限。请参阅user managementGRANT

    【讨论】:

    【解决方案2】:

    在 heroku 上,您需要做的就是告诉 Sequel 连接到 DATABASE_URL 环境变量的内容(这是 Sequel 理解的正确格式的 url):

    DB = Sequel.connect(ENV['DATABASE_URL']) 
    

    【讨论】:

    • 语法“Sequel.postgres(PARAMETERS_GO_HERE)”是否可以接受?我设法通过将 PostgreSQL 数据库添加到我的 Heroku 应用程序、获取其信息并更改我的 Ruby 脚本的 PostgreSQL 连接语法以反映数据库的信息来解决这个问题。
    • “DATABASE_URL”存储在哪里?
    • @alexeypolusov heroku 在您配置数据库时会自动处理该问题。这是在 heroku 上配置 postgresql 的示例:devcenter.heroku.com/articles/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多