关闭。这个问题是题外话。它目前不接受答案。想改进这个问题?更新问题,使其成为 Stack Overflow 的主题。 9年前关闭。改进这个问题
我正在尝试删除我的数据库并通过命令行创建一个新数据库。
我使用 psql -U username
登录,然后执行 \connect template1
,然后执行 DROP DATABASE databasename;
。
我得到错误
其他用户正在访问数据库 databasename
我关闭了 Apache 并再次尝试,但仍然出现此错误。难道我做错了什么?
dropdb databasename
命令会发生什么?
psql -U <user> -c "drop database protodb"
(没有数据库名称)
drop database <dataabase_name>;
不要忘记逗号。
您可以从命令行运行 dropdb 命令:
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
这对我有用:
select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
对于 9.2 之前的 postgresql,将 pid
替换为 procpid
DROP DATABASE "YourDatabase";
select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';
column "procpid" does not exist
用于亚马逊 RDS postgres 9.6 实例
尝试这个。请注意,没有指定数据库 - 它只是“在服务器上”运行
psql -U postgres -c "drop database databasename"
如果这不起作用,我已经看到 postgres 持有孤立的准备好的语句的问题。要清理它们,请执行以下操作:
SELECT * FROM pg_prepared_xacts;
然后对于您看到的每个 id,运行以下命令:
ROLLBACK PREPARED '<id>';
psql
连接引导您并执行自动重置,然后您重新登录并返回到您开始的位置。
当它说用户已连接时,查询“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上。如果不是,这可能需要在第一行调整为本地/标识以外的其他内容,例如主机...您的用户名。
现在你应该能够做到:
psql postgres
drop database mydatabase;
dropuser
命令来删除用户。\l
查看您拥有的所有数据库。