如何使用ruby pg gem列出postgresql数据库?

时间:2016-07-13 23:07:43

标签: ruby-on-rails ruby postgresql

对不起基本问题。我是postgresql的新手。 我想使用一些gem(pg gem?)来查明某个postgresql数据库是否存在。

有类似的东西吗?

PG.does_exist?('my_test_db')

如果我只是尝试连接时数据库不存在,它会抛出异常吗?

begin
  con = PG.connect :dbname => 'my_test_db'
rescue PG::Error => e
  puts e.message
ensure
  con.close if con
end

这仍然让我想到如何列出现有数据库的问题。

背景: 使用命令行我可以执行:

psql -lt

我可以看到我的所有数据库。使用非常丑陋的文本操作,您可以查询数据库是否存在。但肯定有一种方法可以使用红宝石制作它。

2 个答案:

答案 0 :(得分:1)

它引发PG::ConnectionBad例外。

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

救援以确定数据库是否存在。

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

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

答案 1 :(得分:1)

您还可以连接到template1数据库,然后使用

列出所有数据库
SELECT datname FROM pg_database WHERE datistemplate = false;

类似

# 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