我正在尝试通过命令行删除我的数据库并创建一个新的。我使用psql -U用户名
登录,然后执行\connect template1
,接着是DROP DATABASE databasename;
。
我收到了以下错误信息:
数据库databasename正在被其他用户访问
我关闭了Apache并再次尝试,但仍然出现此错误。我做错了什么吗?
我正在尝试通过命令行删除我的数据库并创建一个新的。我使用psql -U用户名
登录,然后执行\connect template1
,接着是DROP DATABASE databasename;
。
我收到了以下错误信息:
数据库databasename正在被其他用户访问
我关闭了Apache并再次尝试,但仍然出现此错误。我做错了什么吗?
dropdb 'database name'
请注意,您必须是超级用户或数据库所有者才能删除它。
您还可以检查pg_stat_activity
视图,查看当前正在针对您的数据库执行哪种类型的活动,包括所有空闲进程。
SELECT * FROM pg_stat_activity WHERE datname='database name';
请注意,从PostgreSQL v13开始,您可以使用以下方法自动断开用户:
DROP DATABASE dbname WITH (FORCE);
或者dropdb -f dbname
dropuser
命令来删除用户。 - pl1nk\l
可以查看您拥有的所有数据库。 - Sandip SubediDROP DATABASE dbname WITH (FORCE);
这完全解决了问题!!! - DanielV这对我有用:
select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
针对 PostgreSQL 版本低于 9.2,将 pid
替换为 procpid
DROP DATABASE "YourDatabase";
select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
翻译成中文是:"必须稍作修改才能执行:在datname='YourDatabase'的pg_stat_activity中选择pg_terminate_backend(pid)" - mrt试试这个。注意没有指定数据库 - 它只是在“服务器”上运行。
psql -U postgres -c "drop database databasename"
如果那行不通,我曾经看到过PostgreSQL会保留孤立的预处理语句的问题。要清理它们,请执行以下操作:SELECT * FROM pg_prepared_xacts;
那么对于每个id,运行以下代码:
ROLLBACK PREPARED '<id>';
--dbname=postgres
到我的命令中。 - Taytaypsql
连接中断开您的连接并执行自动重置,然后您需要重新登录,回到起点。 - fIwJlxSzApHEZIl当说用户已连接时,查询“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。如果不是,则可能需要将第一行中的本地/身份验证调整为其他内容,例如host ... yourusername。
现在您应该能够执行以下操作:
psql postgres
drop database mydatabase;
dropdb databasename
命令会发生什么? - Dylan Markowpsql -U <user> -c "drop database protodb"
(不需要输入数据库名称)来删除数据库。 - user