通过命令行拖放postgresql数据库
我试图删除我的数据库,并通过命令行创build一个新的。 我使用psql -U用户名login,然后执行\ connect template1,然后是DROP DATABASE数据库名;
我得到错误“数据库数据库名正在被其他用户访问”。 我closures了Apache并尝试了这一点,仍然得到这个错误。 难道我做错了什么?
您可以从命令行运行dropdb命令:
dropdb 'database name'
请注意,您必须是超级用户或数据库所有者才能删除它。
您还可以检查pg_stat_activity视图,以查看当前针对数据库执行的活动types,包括所有闲置的进程。
SELECT * FROM pg_stat_activity WHERE datname='database name';
这对我工作:
select pg_terminate_backend(procpid) from pg_stat_activity where datname='YourDatabase';
为psql 9.2及以上取代procid
与pid
DROP DATABASE "YourDatabase";
尝试这个。 请注意,没有指定数据库 – 它只是运行“在服务器上”
psql -U postgres -c "drop database databasename"
如果这不起作用,我看到postgres持有孤立准备好的陈述的问题。
要清理它们,请执行以下操作:
SELECT * FROM pg_prepared_xacts;
那么对于你看到的每一个ID,运行这个:
ROLLBACK PREPARED '<id>';
当它说用户连接时,查询“select * from pg_stat_activity;” 说? 除了你自己的其他用户现在连接了吗? 如果是这样的话,你可能需要编辑你的pg_hba.conf文件来拒绝来自其他用户的连接,或者closures任何正在访问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上。 如果不是这样,可能需要对第一行的本地/标识以外的东西进行调整,如host … yourusername。
现在你应该可以做到:
psql postgres drop database mydatabase;