ruby - 如何使用 Sequel 连接到 postgres 数据库?

标签 ruby sqlite postgresql heroku sequel

当我意识到他们支持的唯一数据库类型是 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。这是通过 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: 数据库 "mydatabase.db"不存在 (Sequel::DatabaseConnectionError)

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

有人知道我做错了什么吗?

最佳答案

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

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

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

PostgreSQL documentationtutorial也强烈推荐。它们写得很好,会教你很多关于 SQL 的知识,尤其是 Pg。

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

关于ruby - 如何使用 Sequel 连接到 postgres 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134596/

相关文章:

sql:如何从一个表复制到另一个表

sql - 按存在于另一个表中的行排序

ruby - 'input = self' 和 'input = self.dup' 有什么区别

ruby - 与 ruby​​ 实时通信

ruby - 从哈希值创建字符串

ruby-on-rails - Link_to 不工作?

java - 我需要在 sqlite 中进行搜索并部署相同的数据与新参数进行比较

android - 在 android 中更新数据库版本时清除 Sqlite 数据库数据中的问题

postgresql - postgres 按行聚合子集

sql - 破译这个postgresql语法?