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

时间:2013-04-10 19:09:54

标签: sql postgresql cmd

我一直在尝试运行这个批处理文件,该文件通过Postgre数据库服务器并运行两个不同的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数据库中,则可能会遇到由代码转换问题导致写入或读取数据库的奇怪字符。使用不同的客户端程序和驱动程序访问数据库时,这可能会让您头疼。 对于大多数安装,Unicode(UTF8)编码将提供最灵活的功能。

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

10 个答案:

答案 0 :(得分:21)

请留待此处获取信息,

如果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

答案 1 :(得分:12)

事实证明,这是因为我的本地和服务器之间的postgre SQL版本不匹配,在我的计算机上安装相同版本的PostgreSQL修复了这个问题。谢谢!

答案 2 :(得分:6)

就我而言,这是因为我在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。

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:3)

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

答案 5 :(得分:1)

如果您使用的是Docker,请确保您未在​​其他服务中使用相同的端口,就我而言,我误将PostgreSQL和Redis都使用了相同的端口。

答案 6 :(得分:0)

在我的情况下,我使用的是Postgresql 9.2.24,解决方案是这个(pg_hba.conf):

host    all             all             0.0.0.0/0            trust

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

listen_addresses = '*'

答案 7 :(得分:0)

如果您的Postgres工作正常,并且突然遇到此错误,则仅通过重新启动Postgres服务或容器即可解决我的问题。

答案 8 :(得分:0)

通过首先为用户设置密码来解决。

在终端

"build": {
  "builder": "@angular-devkit/build-angular:browser",
  "options": {
      ...
  },
  "configurations": {
    "production": {
        ...
    },
    "es5": {
      "tsConfig": "./tsconfig-es5.app.json"
    }
  }
},
"serve": {
  "builder": "@angular-devkit/build-angular:dev-server",
  "options": {
      ...
  },
  "configurations": {
    "production": {
     ...
    },
    "es5": {
      "browserTarget": "yourAppName:build:es5"
    }
  }
},

在pgAdmin中

sudo -u <username> psql

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

\q

答案 9 :(得分:0)

就我而言,我尝试通过 pgAdmin4 使用 ssh 隧道连接,然后在服务器的 AllowTcpForwarding no 中设置 /etc/ssh/sshd_config。但它应该是 AllowTcpForwarding yes