我正在尝试删除数据库并通过命令行创建一个新数据库。
我使用psql -U username
登录,然后执行\connect template1
,然后是DROP DATABASE databasename;
。
我收到错误
其他用户正在访问数据库databasename
我关闭了Apache并再次尝试了这个但是我仍然遇到了这个错误。我做错了吗?
答案 0 :(得分:397)
您可以从命令行运行dropdb命令:
dropdb 'database name'
请注意,您必须是超级用户或数据库所有者才能删除它。
您还可以检查pg_stat_activity视图,以查看当前针对您的数据库进行的活动类型,包括所有空闲进程。
SELECT * FROM pg_stat_activity WHERE datname='database name';
答案 1 :(得分:102)
这对我有用:
select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
对于早于9.2的postgresql,将pid
替换为procpid
DROP DATABASE "YourDatabase";
答案 2 :(得分:60)
试试这个。请注意,没有指定数据库 - 它只是“在服务器上”运行
psql -U postgres -c "drop database databasename"
如果这不起作用,我发现postgres有一个问题是持有孤立的准备好的陈述 要清理它们,请执行以下操作:
SELECT * FROM pg_prepared_xacts;
然后对于您看到的每个ID,运行:
ROLLBACK PREPARED '<id>';
答案 3 :(得分:14)
当它说用户已连接时,查询是什么“select * from pg_stat_activity;”说?现在除了你自己以外的其他用户了吗?如果是这样,您可能必须编辑pg_hba.conf文件以拒绝来自其他用户的连接,或者关闭访问pg数据库的任何应用程序以便能够删除它。我有时会在制作中遇到这个问题。将pg_hba.conf设置为两行,如下所示:
local all all ident
host all all 127.0.0.1/32 reject
告诉pgsql重新加载或重启(即sudo /etc/init.d/postgresql reload或pg_ctl reload),现在连接到你的机器的唯一方法是通过本地套接字。我假设你在Linux上。如果不是这可能需要调整到第一行上本地/身份以外的东西,就像主机... yourusername。
现在你应该可以做到:
psql postgres
drop database mydatabase;