sql >> Databasteknik >  >> RDS >> PostgreSQL

Capistrano med PostgreSQL, fel:databas nås av andra användare

Med PostgreSQL kan du utfärda följande uttalande för att returnera backend-pids för alla öppna anslutningar förutom den här:

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

Sedan kan du skicka en begäran om uppsägning till var och en av dessa backends med

SELECT pg_terminate_backend($1);

Bindning av pids som returneras från den första satsen till varje pg_terminate_backend exec.

Om de andra anslutningarna inte använder samma användare som du måste du ansluta som en superanvändare för att framgångsrikt kunna utfärda avslutningarna.

UPPDATERING:Inkluderar kommentarer och uttrycker som Capistrano-uppgift:

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. ODP.NET UPPDATERING... ÅTERKOMMER INTO... flera rader, Parametertyp

  2. Oracle-datatyp:Ska jag använda VARCHAR2 eller CHAR

  3. Hur undviker man flera funktionsevaler med syntaxen (func()).* i en SQL-fråga?

  4. Hur kan jag importera en databas med MySQL från terminal?