2016-07-13 4 views
1

基本的な質問を申し訳ありません。私はpostgresqlの初心者です。 いくつかのgem(pg gem?)を使用して、特定のpostgresqlデータベースが存在するかどうかを調べたいと思います。ruby​​ pg gemを使ってpostgresqlデータベースを表示するには?

ありますか?

PG.does_exist?('my_test_db') 

接続しようとするとデータベースが存在しない場合は例外がスローされますか?

これは、依然として存在するデータベースをリストする方法の問題を残しています。

背景: 私が実行できるコマンドラインを使用して:

psql -lt 

私はすべてのデータベースを見ることができます。本当に醜いテキスト操作を使用すると、データベースが存在するかどうかを問い合わせることができます。しかし、確かにルビーの宝石を使ってそれを行う方法がなければならない。

+0

のようなものをすべてのデータベースを一覧表示するので、アクティブレコードを使用することができます。 pgを使用しないでください.DBM固有のコードを使用しなければならないレベルに落として、コードをそのデータベースマネージャーに結びつけるのは良い考えではありません。 * IF *できるだけ小さなセクションにコードを分離する必要があります。なぜなら、別のDBMに変換すると、そのコードが変更されるからです。詳細については、http://stackoverflow.com/a/24322440/128421を参照してください。 –

+0

そのリンクでsqlクエリを試しても機能しませんでした。重複していないため、これを重複としてマークしないでください。私はactiverecordを使って同等の処理を行う方法については求めていません。私はpsqlを求めました。 –

答えて

1

またtemplate1データベースに接続し、そう

SELECT datname FROM pg_database WHERE datistemplate = false; 

であなたがRailsのを使用している

# Output list of all databases 
conn = PG.connect(dbname: 'template1') 
conn.exec("SELECT datname FROM pg_database WHERE datistemplate = false;") do |result| 
    result.each do |row| 
    puts row.values_at('datname') 
    end 
end 
+0

うわー、それは働いた。私は持っているすべてのデータベースを印刷しました。トータルブラックマジック。 –

+0

私はデータベースが存在するかどうかをチェックする方法を自分で考え出したので、これを答えとしてマークします。しかし、この答えは私自身は分かりませんでした。 –

1

PG::ConnectionBad例外を発生させます。

PG.connect dbname: "nonexistent" 
# => PG::ConnectionBad: FATAL: database "nonexistent" does not exist 

dbが存在するかどうかを調べるために救助してください。

def db_exists?(name) 
    PG.connect dbname: "nonexistent" 
rescue PG::ConnectionBad => e 
    false 
end 

db_exists?("nonexistent") # => false 
db_exists?("exists") # truthy Connection object 
+0

これは完全に機能します。確認していただきありがとうございます。 –

関連する問題