psql:服务器意外地关闭了连接

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

我一直在尝试运行这个批处理文件,该批处理文件通过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 [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
(注意,上面的命令是针对ubuntu的。其他linux发行版或操作系统可能有不同的路径指向这些文件)

注意:对侦听地址使用
'*'
将侦听所有接口。如果使用
'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