当我意识到他们支持的唯一数据库类型是 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 documentation和 tutorial也强烈推荐。它们写得很好,会教你很多关于 SQL 的知识,尤其是 Pg。
顺便说一句,postgres
用户是 super 用户。您不应该将它用于您的应用程序;这就像以 root 用户身份运行服务器,这是一个非常糟糕的主意。创建一个没有 super 用户、createdb 或 createuser 权限的新 PostgreSQL 用户,并将其用于您的应用程序。您可以 CREATE DATABASE somedb WITH OWNER myappuser
- 或者最好是创建由不同用户拥有的数据库给您的 webapp 用户,然后明确地 GRANT
webapp 用户所需的最低权限.参见 user management和 GRANT .
关于ruby - 如何使用 Sequel 连接到 postgres 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134596/