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

时间:2012-08-26 22:58:29

标签: ruby sqlite postgresql heroku sequel

当我意识到他们支持的唯一数据库类型是PostgreSQL时,我正在使用Heroku.com制作一个Web应用程序进行部署。到目前为止,我的应用程序(由Ruby gem Sinatra提供支持)通过.Seql 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: database "mydatabase.db" does not exist (Sequel::DatabaseConnectionError)

我已尝试搜索Google,StackOverflow,续集文档和Heroku帮助文档以获取任何帮助,但我找不到解决此问题的方法。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

强烈建议使用PostgreSQL documentationtutorial。它们编写得很好,一般会教你很多SQL,特别是Pg。

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

答案 1 :(得分:1)

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

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