Убить сеанс / соединение postgresql - PullRequest
308 голосов
/ 24 февраля 2011

Как я могу убить все мои соединения postgresql?

Я пытаюсь rake db:drop, но получаю:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

Я пытался завершить процессы, которые я вижу изps -ef | grep postgres но это тоже не работает:

kill: kill 2358 failed: operation not permitted

Ответы [ 18 ]

1 голос
/ 22 сентября 2016

Закройте postgres и перезапустите его.Просто, но каждый раз работает для меня, а другие команды cli иногда не работают.

1 голос
/ 28 мая 2015

Просто хотел отметить, что Ответ Хариса может не работать, если какой-то другой фоновый процесс использует базу данных, в моем случае это были отложенные задания, я сделал:

script/delayed_job stop

И только тогда мне удалось сбросить / сбросить базу данных.

1 голос
/ 18 июня 2019

Более простой и обновленный способ:

  1. Используйте ps -ef | grep postgres, чтобы найти соединение #
  2. sudo kill -9 "#" соединения

Примечание. Может быть идентичный PID. Убийство одного убивает всех.

0 голосов
/ 04 июля 2016

Корпус:
Не удалось выполнить запрос:

DROP TABLE dbo.t_tabelname

Решение:
а. Отобразить запрос Status Activity следующим образом:

SELECT * FROM pg_stat_activity  ;

б. Найти строку, в которой столбец «Запрос» содержит:

'DROP TABLE dbo.t_tabelname'

с. В той же строке получить значение столбца «PID»

example : 16409

д. Выполните эти сценарии:

SELECT 
    pg_terminate_backend(25263) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    25263 <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;
0 голосов
/ 02 апреля 2019

Откройте PGadmin, посмотрите, открыта ли какая-либо страница запроса, закройте всю страницу запроса, отключите сервер PostgresSQL, снова подключите его и попробуйте удалить / удалить. Это помогло мне.

0 голосов
/ 22 января 2015

Нет необходимости сбрасывать его. Просто удалите и заново создайте общедоступную схему. В большинстве случаев это имеет точно такой же эффект.

namespace :db do

desc 'Clear the database'
task :clear_db => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.tables.each do |table|
    next if table == 'schema_migrations'
    ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
  end
end

desc 'Delete all tables (but not the database)'
task :drop_schema => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.execute("DROP SCHEMA public CASCADE")
  ActiveRecord::Base.connection.execute("CREATE SCHEMA public")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO postgres")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO public")
  ActiveRecord::Base.connection.execute("COMMENT ON SCHEMA public IS 'standard public schema'")
end

desc 'Recreate the database and seed'
task :redo_db => :environment do |t,args|
  # Executes the dependencies, but only once
  Rake::Task["db:drop_schema"].invoke
  Rake::Task["db:migrate"].invoke
  Rake::Task["db:migrate:status"].invoke 
  Rake::Task["db:structure:dump"].invoke
  Rake::Task["db:seed"].invoke
end

end
0 голосов
/ 28 января 2019

Я на Mac и использую postgres через Postgres.app. Я решил эту проблему, просто выйдя и снова запустив приложение.

0 голосов
/ 08 марта 2016

Удаленный сценарий. Но если вы пытаетесь запустить тесты в приложении rails, и вы получаете что-то вроде

"ActiveRecord :: StatementInvalid: PG :: ObjectInUse: ОШИБКА: к базе данных" myapp_test "обращаются другие пользователи ДЕТАЛИ: Есть еще 1 сеанс, использующий базу данных. "

Убедитесь, что вы закрыли pgAdmin или любые другие инструменты GUI postgres перед запуском тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...