lib/pvcglue/packages/role_db.rb in pvcglue-0.1.24 vs lib/pvcglue/packages/role_db.rb in pvcglue-0.1.25

- old
+ new

@@ -36,9 +36,48 @@ run(%Q[sudo -u postgres psql -c "CREATE DATABASE #{db_name} WITH OWNER #{username}"]) run(%Q[sudo -u postgres psql #{db_name} -c "ALTER SCHEMA public OWNER TO #{username}"]) end end +package 'postgresql-app-stage-db-drop' do + apply do + username = Pvcglue.cloud.stage_env['DB_USER_POSTGRES_USERNAME'] + db_name = username # just for clarity in later statements. This also must match database.yml. + + sql = <<-SQL + UPDATE pg_catalog.pg_database + SET datallowconn=false WHERE datname='#{db_name}' + SQL + run(%Q[sudo -u postgres psql -c "#{sql}"]) + + # To simplify logic, try it with both versions. + # version >= 9.2 + sql = <<-SQL + SELECT pg_terminate_backend(pg_stat_activity.pid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = '#{db_name}'; + SQL + run(%Q[sudo -u postgres psql -c "#{sql}"]) + + # #puts "version < 9.2" + sql = <<-SQL + SELECT pg_terminate_backend(pg_stat_activity.procpid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = '#{db_name}'; + SQL + run(%Q[sudo -u postgres psql -c "#{sql}"]) + + run(%Q[sudo -u postgres psql -c "DROP DATABASE #{db_name}"]) + + sql = <<-SQL + UPDATE pg_catalog.pg_database + SET datallowconn=true WHERE datname='#{db_name}' + SQL + run(%Q[sudo -u postgres psql -c "#{sql}"]) + + end +end + package 'postgresql-root-password' do apply do # TODO: Use this to implement setting of the root password # sudo(%q[sudo -u postgres psql -c "ALTER ROLE postgres WITH PASSWORD 'zzz';"]) end