psql:服务器意外地关闭了连接
我一直在尝试运行这个批处理文件,该批处理文件通过Postgre DB服务器并运行两个不同的sql文件,如下所示:psql:服务器意外地关闭了连接,sql,postgresql,cmd,Sql,Postgresql,Cmd,我一直在尝试运行这个批处理文件,该批处理文件通过Postgre DB服务器并运行两个不同的sql文件,如下所示: set PGPASSWORD=blah cls @echo on "C:\Progra~1\pgAdmin III\1.16\psql" -d [db name] -h [server name] -p 5432 -U postgres -f C:\query1.sql "C:\Progra~1\pgAdmin III\1.16\psql" -d [db name] -h [serv
set PGPASSWORD=blah
cls
@echo on
"C:\Progra~1\pgAdmin III\1.16\psql" -d [db name] -h [server name] -p 5432 -U postgres -f C:\query1.sql
"C:\Progra~1\pgAdmin III\1.16\psql" -d [db name] -h [server name] -p 5432 -U postgres -f C:\query2.sql
但问题是,有时我会在query1或query2的命令中出现以下错误:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
这只是偶尔发生,所以我不完全确定为什么会发生。有人能解释一下为什么会这样,以及这个问题是否有解决方案吗。谢谢
更新:在实际的Postgre应用程序中尝试打开远程服务器时,有时我也会遇到相同的错误:“出现错误:”服务器意外关闭了连接
这可能意味着服务器异常终止
在处理请求之前或处理请求时。”
在点击错误弹出窗口后,我也得到了这个古鲁提示:
数据库编码
创建数据库VA trac是为了使用SQL_ASCII编码存储数据。此编码仅为7位字符定义;未定义第8位字符集(非ASCII字符127-255)的含义。因此,服务器无法将数据转换为其他编码。
如果在数据库中存储非ASCII数据,强烈建议您使用表示语言环境字符集的正确数据库编码,以便在需要时从自动转换到不同客户端编码中获益。如果在SQL\U ASCII数据库中存储非ASCII数据,则可能会遇到写入或读取fr的奇怪字符在使用不同的客户端程序和驱动程序访问数据库时,这可能会使您感到非常头痛。
对于大多数安装,Unicode(UTF8)编码将提供最灵活的功能
不管怎样,服务器仍然会在之后打开,我可以从那时起访问数据库。结果是因为我的本地和服务器之间的postgre SQL版本不匹配,在我的计算机中安装相同版本的PostgreSQL修复了此问题。谢谢!将此信息留在此处 如果PostgreSQL server位于另一台计算机上并且未侦听外部接口,也可能导致此错误 要调试此特定问题,可以执行以下步骤:
- 查看您的postgresql.conf,
sudovim/etc/postgresql/9.3/main/postgresql.conf
- 添加此行:
listen\u addresses='*'
- 重新启动服务
sudo/etc/init.d/postgrestart
'*'
将侦听所有接口。如果使用'0.0.0'
,则它将侦听所有ipv4,如果使用'::'
则它将侦听所有ipv6
这是一篇老文章,但 只是很惊讶没有人谈论pg_hba文件,因为它可能是获取此错误代码的一个很好的理由 对于忘记配置的用户,请检查此处:
就我而言,这是因为我在位于Windows数据文件夹中的pg_hba.conf中错误地设置了IP配置
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
我错误地输入(复制粘贴:-)192.168.0.0而不是192.168.1.0。在我的情况下,我使用的是Postgresql 9.2.24,解决方案是(pg_hba.conf): 对于远程连接,请使用信任与(如上所述)结合使用
如果您的Postgres正在工作,并且突然遇到此错误,则只需重新启动Postgres服务或容器即可解决我的问题。在我的情况下,我通过pgAdmin通过ssh隧道建立连接,并设置为主机字段ip地址,但如果您使用Docker make,则必须设置
本地主机当然,您没有在另一个服务中使用相同的端口,在我的例子中,我错误地为PostgreSQL和Redis使用了相同的端口。首先为用户设置密码
在终点站
sudo-u psql
更改用户密码“SetPassword”;
#变换角色
\q
在pgAdmin中
**Connection**
Host name/address: 127.0.0.1
Port: 5432
Maintenance database: postgres
username: postgres
password: XXXXXX
当您以交互方式登录(即不使用SQL脚本)时,是否会获得相同的效果?PostgreSQL的日志文件对终止的连接有何说明?PostgreSQL版本?如果使用PostgreSQL的
bin
目录中的psql
而不是PgAdmin III中捆绑的目录,会发生什么情况?是否涉及任何防火墙?请检查上面的更新,我的版本是1.16.1如果连接随机中止,我会怀疑网络问题。再说一次,PostgreSQL服务器上的日志对这些终止的连接说了什么?Craig要求的是PostgreSQL版本,而不是PgAdmin版本。结果表明,这是因为我的本地和服务器之间的PostgreSQL版本不匹配,在我的计算机上安装了相同版本的PostgreSQL修复了此问题。谢谢!请注意,listen\u addresses='*'
不属于pg\u hba.conf
,而是属于postgresql.conf
,默认情况下,list\u addresses设置为all(*)。这绝对是我所需要的解决方案——除了postgresql.conf
中的listen\u addresses='*'
行之外,还将这一行添加到pg_hba.conf
中,这是不安全的,因此我不建议您在生产中使用它。这可能表明pg_hba.conf中确实存在网络许可问题o有待解决。这一行listen\u addresses='*'
默认存在于官方的停靠图像上,这对我来说毫无意义。如果从未建立连接,如何终止连接?对于64位Windows,postgresql.conf位于C:\Program Files\postgresql\\data
2020年8月。这仍然是相关的。我该如何处理把它们放在一起?只有一个例子:pgAdmin 4.28不会连接到任何postgres服务器12.4。如果你降级
listen_addresses = '*'
**Connection**
Host name/address: 127.0.0.1
Port: 5432
Maintenance database: postgres
username: postgres
password: XXXXXX