通过命令行拖放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及以上取代procidpid

 DROP DATABASE "YourDatabase"; 

http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/

尝试这个。 请注意,没有指定数据库 – 它只是运行“在服务器上”

 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;