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

Capistrano dengan PostgreSQL, kesalahan:database sedang diakses oleh pengguna lain

Dengan PostgreSQL Anda dapat mengeluarkan pernyataan berikut untuk mengembalikan pid backend dari semua koneksi terbuka selain yang ini:

SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();

Kemudian Anda dapat mengeluarkan permintaan penghentian untuk masing-masing backend tersebut dengan

SELECT pg_terminate_backend($1);

Mengikat pid yang dikembalikan dari pernyataan pertama ke setiap pg_terminate_backend exec.

Jika koneksi lain tidak menggunakan pengguna yang sama seperti Anda, Anda harus terhubung sebagai superuser agar berhasil mengeluarkan penghentian.

PEMBARUAN:Menggabungkan komentar dan menyatakan sebagai tugas Capistrano:

desc "Force disconnect of open backends and drop database"
task :force_close_and_drop_db do
  dbname = 'your_database_name'
  run "psql -U postgres",
      :data => <<-"PSQL"
         REVOKE CONNECT ON DATABASE #{dbname} FROM public;
         ALTER DATABASE #{dbname} CONNECTION LIMIT 0;
         SELECT pg_terminate_backend(pid)
           FROM pg_stat_activity
           WHERE pid <> pg_backend_pid()
           AND datname='#{dbname}';
         DROP DATABASE #{dbname};
      PSQL
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. Mewakili waktu mendatang di PostgreSQL

  2. Bagaimana cara memanggil fungsi Postgres yang mengembalikan catatan SETOF?

  3. Bagaimana cara saya memilih nilai non-null sebelumnya secara efisien?

  4. Hapus baris duplikat berdasarkan bidang dalam kueri pemilihan dengan PostgreSQL?

  5. Bagaimana Anda memastikan nilai dari tabel logging cocok dengan objek di tabel lain?