sql >> データベース >  >> RDS >> PostgreSQL

Capistrano with PostgreSQL、エラー:データベースは他のユーザーによってアクセスされています

    PostgreSQLでは、次のステートメントを発行して、これ以外のすべての開いている接続のバックエンドpidを返すことができます。

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

    次に、これらの各バックエンドに終了リクエストを発行できます

    SELECT pg_terminate_backend($1);
    

    最初のステートメントから返されたpidを各pg_terminate_backendexecにバインドします。

    他の接続があなたと同じユーザーを使用していない場合、正常に終了を発行するには、スーパーユーザーとして接続する必要があります。

    更新:コメントを組み込み、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. MySQLWorkbenchを使用して新しいデータベースを作成します

    2. Oracle:AFTER ALTERトリガーでオブジェクトの新しい名前を判別するにはどうすればよいですか?

    3. 2つのエンティティ間の複数の関係、これは良い習慣ですか?

    4. LIKE'%...%'ワイルドカードクエリのPL/SQLパフォーマンスチューニング