Защото се опитвате да изпълните dropDb
команда за база данни, към която имате отворена връзка.
Според документацията на postgres:
Това има смисъл, защото когато премахнете цялата база данни, всички отворени връзки, препращащи към тази база данни, стават невалидни, така че препоръчителният подход е да се свържете с друга база данни и да изпълните тази команда отново.
Ако сте изправени пред ситуация, в която различен клиент е свързан към базата данни и наистина искате да премахнете базата данни, можете принудително да изключите всички клиенти от тази конкретна база данни.
Например, за принудително прекъсване на връзката на всички клиенти от базата данни mydb
:
Ако PostgreSQL <9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Иначе
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Забележка: Тази команда изисква привилегии на суперпотребител.
След това можете да се свържете с друга база данни и да стартирате dropDb
команда отново.