对不起基本问题。我是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
我可以看到我的所有数据库。使用非常丑陋的文本操作,您可以查询数据库是否存在。但肯定有一种方法可以使用红宝石制作它。
答案 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