关于 PostgreSQL 删除数据库 - 命令行删除,报错数据库不存在,pgadmin 报错存在会话链接,或者即使自动连接删除了,还一直在重复连接,导致无法删除数据库问题

在Windows10环境下,当尝试删除PostgreSQL数据库遇到因会话链接存在而无法删除的问题时,可以使用超级管理员权限登录,执行pg_terminate_backend命令终止相关进程,然后通过pgAdmin或命令行尝试删除。如果仍然失败,可能需要重启PostgreSQL服务,并再次清理会话。在某些情况下,快速操作以避免新会话建立可能是必要的。
摘要由CSDN通过智能技术生成

序言

测试环境:

Windows 10

一、问题

笔者尝试过在 cmd 命令行,使用PostgreSQL 的 psql 工具登录 postgresql,删除某个有问题的数据库,准备新建重载该数据库时,发现 DROP DATABASE database_name ,竟然报错该数据库不存在,可是笔者使用命令 \l查看数据库时,发现那个数据库明明就还在那里存在着,真就古怪了,后面尝试 pgadmin 可视化工具,删除数据库,报错无法删除该数据库,原因是有一些会话链接存在,导致无法手动删除。

在这里插入图片描述

解决方法

用超级管理员,如 postgres用户,登录 postgresql,记得输入口令,即密码。

psql -U postgres -d postgres

然后在 postgres=# 下运行如下命令:

SELECT CAST(pg_terminate_backend(pid) AS VARCHAR(10)) FROM pg_stat_activity WHERE datname='test-db';

注意,上述语句里的test-db要替换成您将要删除的数据库名即可;

差别多类似下面的样子,就是成功。

pg_terminate_backend
----------------------
true 

然后有一点是需要注意的,之后笔者在 cmd 命令行,使用 DROP DATABASE database_name 命令,依旧无法删除指定的那个问题数据库,最后还是通过 pgAdmin 可视化工具,右键点击数据库 DELETE ,删除数据库。

补充

PostgreSQL 数据库大小写规则

该链接是笔者后面了解到细节问题,关于数据库名要加双引号或单引号,在 PostgreSQL 很关键,最好加上去,当然什么时候用双引号和单引号,经验使然。

数据库无法删除,补充下笔者找到的命令:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='test' AND pid<>pg_backend_pid();

注意 datname ='删除的数据库名'

将 test 修改为想要删除的数据库名。

二、有一个特别的情况是,即使使用了上面的命令,依旧无法删除数据库的问题。

解决方法:

重新启动 postgreSQL 数据库

注意:不要使用 pg_ctl restart 命令去重启 postgresql 数据库

使用如下命令重启:

pg_ctl stop

pg_ctl start -l /test/pyserver.log

然后还有使用命令,将之前的数据库链接删除:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='test' AND pid<>pg_backend_pid();

然后就可删除数据库了。

如果还是不行,那么只能靠手速了,复用上面的会话删除命令:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='test' AND pid<>pg_backend_pid();

快速删除会话,快速删除数据库,争取快过它们建立会话的速度。

drop database "your_database_name";

参考链接

PGSQL删除数据库里提示数据库有连接会话,不能删除怎么办?

PostgreSQL是一种开源的关系型数据库,它提供了多种管理工具来操作数据库,其中包括psql和pg_dump命令。 psql是一种命令行工具,可以用来与PostgreSQL数据库进行交互。它不仅能够执行SQL语句,还可以支持交互式命令。在使用psql命令时,有时需要在命令中包含密码信息。可以使用以下的方式来在命令行中带密码执行SQL语句: 1. 在命令行中输入psql命令,启动psql工具。 2. 输入连接数据库的命令,例如:psql -U username -d dbname -h hostname -p port。 3. 输入密码,此时必须在命令行中输入密码。 4. 执行SQL语句,例如:SELECT * FROM tablename; pg_dump是PostgreSQL数据库备份工具,可以用来将数据库中的数据导出到一个文件中。使用pg_dump命令时,也需要在命令行中包含密码信息。可以使用以下的方式在命令行中带密码执行pg_dump命令: 1. 在命令行中输入pg_dump命令,启动pg_dump工具。 2. 输入数据库连接信息和密码,例如:pg_dump -U username -d dbname -h hostname -p port -W。 3. 执行备份操作,例如:pg_dump -U username -d dbname -h hostname -p port -W > backup.sql。 总的来说,在使用psql和pg_dump命令时,为了在命令中包含密码信息,需要使用“-W”参数将密码输入到命令行中。当然,这种方式存在一定的安全隐患,因为密码可以被其他人看到。因此,最好使用其他方式来进行密码管理,例如使用配置文件、环境变量或者其他安全的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值