簡體   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