PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thử nghiệm dưa chuột và RSpec với zeus:Postgres đang được người dùng khác truy cập

Lấy cảm hứng từ câu trả lời này , chúng tôi đã tạo database.rake sau tập tin. Trong đó câu trả lời ban đầu chỉ hoạt động cho PostgreSQL 9.1, câu trả lời này cũng được sửa đổi để hoạt động cho PostgreSQL 9.2. Cơ chế này không phải là đẹp nhất:khi lệnh 9.1 bị lỗi, nó chỉ thực hiện lệnh 9.2. Nhưng điều quan trọng nhất:nó hoạt động!

#{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. Cách cấu hình PostgreSQL để chấp nhận tất cả các kết nối đến

  2. Heroku - kết xuất và tải một bảng vào cơ sở dữ liệu postgres được chia sẻ

  3. Nhóm postgresql theo cho nhiều dòng

  4. Lấy tên ngày ngắn trong PostgreSQL

  5. Chạy di chuyển Django trên dự án dày đặc