sql >> Database teknologi >  >> RDS >> PostgreSQL

Capistrano med PostgreSQL, fejl:andre brugere får adgang til databasen

Med PostgreSQL kan du udstede følgende erklæring for at returnere backend-pids for alle åbne forbindelser bortset fra denne:

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

Derefter kan du udstede en anmodning om opsigelse til hver af disse backends med

SELECT pg_terminate_backend($1);

Binding af pids returneret fra den første sætning til hver pg_terminate_backend exec.

Hvis de andre forbindelser ikke bruger den samme bruger som dig, bliver du nødt til at oprette forbindelse som en superbruger for at kunne udstede terminates.

OPDATERING:Inkorporerer kommentarer og udtrykker som Capistrano-opgave:

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. MYSQL Vælg fra tabeller baseret på flere rækker

  2. MySQL og lås en tabel, læs og afkort derefter

  3. regexp_matches bedre måde at slippe af med tilbagevendende krøllede parenteser

  4. PDO sqlsrv:kunne ikke finde driveren