Class: Ardb::Adapter::Postgresql
- Inherits:
-
Base
- Object
- Base
- Ardb::Adapter::Postgresql
show all
- Defined in:
- lib/ardb/adapter/postgresql.rb
Instance Attribute Summary
Attributes inherited from Base
#config
Instance Method Summary
collapse
Methods inherited from Base
#==, #connect_db, #connect_hash, #database, #dump_ruby_schema, #dump_schema, #escape_like_pattern, #initialize, #load_ruby_schema, #load_schema, #migrate_db, #migrate_db_backward, #migrate_db_down, #migrate_db_forward, #migrate_db_up, #migrations_path, #ruby_schema_path, #schema_format, #sql_schema_path
Instance Method Details
#create_db ⇒ Object
17
18
19
20
21
22
23
24
|
# File 'lib/ardb/adapter/postgresql.rb', line 17
def create_db
ActiveRecord::Base.establish_connection(public_connect_hash)
ActiveRecord::Base.connection.create_database(
database,
connect_hash,
)
ActiveRecord::Base.establish_connection(connect_hash)
end
|
#drop_db ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/ardb/adapter/postgresql.rb', line 26
def drop_db
begin
ActiveRecord::Base.establish_connection(public_connect_hash)
ActiveRecord::Base.connection.tap do |conn|
conn.execute(
"UPDATE pg_catalog.pg_database"\
" SET datallowconn=false WHERE datname='#{database}'",
)
conn.execute "SELECT pg_terminate_backend(pid)"\
" FROM pg_stat_activity WHERE datname='#{database}'"
conn.execute "DROP DATABASE IF EXISTS #{database}"
end
rescue PG::Error => ex
raise ex unless ex.message =~ /does not exist/
end
end
|
#drop_tables ⇒ Object
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/ardb/adapter/postgresql.rb', line 46
def drop_tables
ActiveRecord::Base.connection.tap do |conn|
tables = conn.execute "SELECT table_name"\
" FROM information_schema.tables"\
" WHERE table_schema = 'public';"
tables.each do |row|
conn.execute "DROP TABLE #{row["table_name"]} CASCADE"
end
end
end
|
#dump_sql_schema ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/ardb/adapter/postgresql.rb', line 64
def dump_sql_schema
require "scmd"
cmd_str =
"pg_dump -i -s -x -O -f \"#{sql_schema_path}\" #{database}"
cmd = Scmd.new(cmd_str, env: env_var_hash).tap(&:run)
raise "Error dumping database" unless cmd.success?
end
|
#load_sql_schema ⇒ Object
57
58
59
60
61
62
|
# File 'lib/ardb/adapter/postgresql.rb', line 57
def load_sql_schema
require "scmd"
cmd_str = "psql -f \"#{sql_schema_path}\" #{database}"
cmd = Scmd.new(cmd_str, env: env_var_hash).tap(&:run)
raise "Error loading database" unless cmd.success?
end
|
#public_connect_hash ⇒ Object
the “postgres” db is a “public” (doesn“t typically require auth/grants to connect to) db that typically exists for all postgres installations; the adapter uses it to create/drop other databases
10
11
12
13
14
15
|
# File 'lib/ardb/adapter/postgresql.rb', line 10
def public_connect_hash
@public_connect_hash ||= connect_hash.merge({
"database" => "postgres",
"schema_search_path" => "public",
})
end
|