49

我一直在尝试运行这个通过 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 应用程序中尝试打开远程服务器时,有时我也会遇到同样的错误:“发生错误:“服务器意外关闭了连接这可能意味着服务器在处理请求之前或处理请求时异常终止。”

在我点击错误弹出窗口后,我也得到了这个 Guru Hint 的东西:

数据库编码 创建数据库 VA-trac 以使用 SQL_ASCII 编码存储数据。此编码仅针对 7 位字符定义;未定义第 8 位设置的字符(非 ASCII 字符 127-255)的含义。因此,服务器不可能将数据转换为其他编码。如果您在数据库中存储非 ASCII 数据,强烈建议您使用代表您的语言环境字符集的正确数据库编码,以便在需要时从自动转换为不同的客户端编码中受益。如果您将非 ASCII 数据存储在 SQL_ASCII 数据库中,您可能会遇到由代码转换问题引起的写入或读取数据库的奇怪字符。当使用不同的客户端程序和驱动程序访问数据库时,这可能会让您非常头疼。

无论如何,服务器仍然会在之后打开,我可以从那时起访问数据库。

4

10 回答 10

40

留下这个信息,

如果 PostgreSQL 服务器在另一台机器上并且没有侦听外部接口,也会导致此错误。

要调试此特定问题,您可以按照以下步骤操作:

  • 看看你的 postgresql.conf,sudo vim /etc/postgresql/9.3/main/postgresql.conf
  • 添加这一行:listen_addresses = '*'
  • 重启服务sudo /etc/init.d/postgresql restart

(注意,上面的命令是针对 ubuntu 的。其他 linux 发行版或操作系统可能有不同的路径到这些文件)

注意:使用'*'监听地址将监听所有接口。如果你这样做,'0.0.0.0'那么它会监听所有的 ipv4,如果你这样做'::',它会监听所有的 ipv6。

http://www.postgresql.org/docs/9.3/static/runtime-config-connection.html

于 2015-09-29T12:57:37.380 回答
25

原来这是因为我的本地和服务器之间的 postgre SQL 版本不匹配,在我的计算机上安装相同版本的 PostgreSQL 解决了这个问题。谢谢!

于 2013-04-12T17:46:24.900 回答
8

就我而言,这是因为我在 pg_hba.conf 中错误地设置了 IP 配置,该配置位于 Windows 的数据文件夹中。

# 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。

于 2016-06-25T07:23:01.267 回答
5

就我而言,我使用的是 Postgresql 9.2.24,解决方案是这样的(pg_hba.conf):

host    all             all             0.0.0.0/0            trust

对于远程连接,请使用trust。结合(如上所述)

listen_addresses = '*'
于 2019-03-15T17:17:41.717 回答
4

在我的情况下,我通过 pgAdmin 与 ssh 隧道建立连接并设置为主机字段 ip 地址,但有必要设置localhost

于 2020-02-28T11:56:50.510 回答
3

这是一个旧帖子,但是...

只是惊讶于没有人谈论 pg_hba 文件,因为它可能是获取此错误代码的一个很好的理由。

在这里检查那些忘记配置它的人: http ://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html

于 2016-04-07T12:32:04.917 回答
1

在我的情况下,我尝试通过 pgAdmin4 使用 ssh 隧道连接,然后AllowTcpForwarding no在服务器的/etc/ssh/sshd_config. 但它应该是AllowTcpForwarding yes

于 2021-07-13T20:32:12.753 回答
1

如果您使用 Docker,请确保您没有在另一个服务中使用相同的端口,在我的情况下,我错误地为 PostgreSQL 和 Redis 使用了相同的端口。

于 2020-09-02T18:53:03.320 回答
0

如果您的 Postgres 正在工作,但突然遇到此错误,我的问题只需重新启动 Postgres 服务或容器即可解决。

于 2019-08-26T12:15:34.117 回答
0

解决方法是先给用户设置密码。

在终端

sudo -u <username> psql

ALTER USER <username> PASSWORD 'SetPassword';
# ALTER ROLE

\q

在 pgAdmin 中

**Connection**

Host name/address: 127.0.0.1
Port: 5432
Maintenance database: postgres
username: postgres
password: XXXXXX
于 2020-11-15T03:43:34.830 回答