sql >> Database >  >> RDS >> PostgreSQL

Capistrano met PostgreSQL, fout:database wordt geopend door andere gebruikers

Met PostgreSQL kunt u de volgende instructie geven om de backend-pids van alle andere open verbindingen dan deze te retourneren:

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

Vervolgens kunt u een beëindigingsverzoek indienen bij elk van die backends met

SELECT pg_terminate_backend($1);

Binden van de pids die zijn geretourneerd van de eerste instructie aan elke pg_terminate_backend exec.

Als de andere verbindingen niet dezelfde gebruiker als u gebruiken, moet u verbinding maken als supergebruiker om de beëindigingen met succes uit te geven.

UPDATE:opmerkingen opnemen en uitdrukken als Capistrano-taak:

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. Hoe kan ik wachtwoorden hashen in postgresql?

  2. MariaDB JSON_SET() uitgelegd

  3. Gebruik zoiets als TOP met GROUP BY

  4. SQL 'AT TIME ZONE', query breed en met een 'SELECT' alle kolommen (tabelnaam.*) expressie