繁体   English   中英

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

[英]How do I connect to a postgres database with 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,Sequel文档和Heroku帮助文档以获得任何帮助,但我找不到解决此问题的方法。

有谁知道我做错了什么?

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

  • 您可能意味着没有SQLite特定的.db文件名后缀的mydatabase
  • 您可以使用不同的大小写创建数据库,例如"Mydatabase.db" ;
  • 您可能正在连接到不同于您认为不同的Pg服务器
  • 您从未创建过数据库 Unlke SQLite的默认行为,当您尝试连接到尚不存在的数据库时,Pg不会创建数据库。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM