PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Pengujian mentimun dan RSpec dengan zeus:Postgres sedang diakses oleh pengguna lain

Terinspirasi oleh jawaban ini , kami membuat database.rake berikut ini mengajukan. Di mana jawaban asli hanya berfungsi untuk PostgreSQL 9.1, jawaban ini dimodifikasi agar berfungsi juga untuk PostgreSQL 9.2. Mekanismenya bukan yang terbaik:ketika perintah 9.1 gagal, itu hanya menjalankan perintah 9.2. Tapi yang paling penting:berhasil!

#{Rails.root}/lib/tasks/databases.rake
# monkey patch ActiveRecord to avoid There are n other session(s) using the database.
def drop_database(config)
  case config['adapter']
  when /mysql/
    ActiveRecord::Base.establish_connection(config)
    ActiveRecord::Base.connection.drop_database config['database']
  when /sqlite/
    require 'pathname'
    path = Pathname.new(config['database'])
    file = path.absolute? ? path.to_s : File.join(Rails.root, path)

    FileUtils.rm(file)
  when /postgresql/
    begin
      ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
      ActiveRecord::Base.connection.select_all("select * from pg_stat_activity order by procpid;").each do |x|
        if config['database'] == x['datname'] && x['current_query'] =~ /<IDLE>/
          ActiveRecord::Base.connection.execute("select pg_terminate_backend(#{x['procpid']})")
        end
      end
      ActiveRecord::Base.connection.drop_database config['database']
    rescue # in PG 9.2 column procpid was renamed pid and the query status is checked not using 'current_query' but using 'state'
      ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
      ActiveRecord::Base.connection.select_all("select * from pg_stat_activity order by pid;").each do |x|
        if config['database'] == x['datname'] && x['state'] =~ /idle/
          ActiveRecord::Base.connection.execute("select pg_terminate_backend(#{x['pid']})")
        end
      end
      ActiveRecord::Base.connection.drop_database config['database']
    end
  end
end


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Partisi SparkSQL PostgresQL Dataframe

  2. Hapus duplikat dari tabel

  3. Bagaimana cara membuat jaringan antara gambar Docker pada waktu pembuatan?

  4. Regex untuk PostgreSQL untuk mendapatkan domain dengan sub-domain dari URL/Situs Web

  5. Mengatasi kendala unik Sequelize di asosiasi milikToMany