标签: postgresql

如果服务器是 8.x,我应该构建什么 postgresql 客户端版本?

我计划更新当前在 Windows 上运行 8.x 服务器、在 Windows 上运行 8.x 客户端以及在 Linux 上运行 8.x 客户端的系统。显然,在混合环境中这似乎是一个糟糕的平台选择,但 Linux 机器没有持久可写存储(作为反 rootkit 措施)。我现在担心版本之间的兼容性。

Linux postgresql 9.0.x 客户端可以连接到 Windows 8.x 服务器吗?服务器正在使用一些第三方二进制扩展,因此升级它是一项更复杂的任务,将在稍后完成。

如果不鼓励将 9.0.x 客户端和 8.x 服务器结合起来,那么如果我先升级服务器,最新的 8.x 客户端是否能够继续连接?

META:什么标签适合向后兼容性问题?

postgresql upgrade

3
推荐指数
1
解决办法
2578
查看次数

Postgres 子进程占用大量内存

我们有一个 postgres 9.0 实例,它运行在一台非常强大的机器上(96G RAM/24 个内核)。最近几周,我们经历了由于 OOM 杀手因内存不足而杀死 postgres 子进程而导致的崩溃。似乎由于使用连接池,这些子进程寿命很长(这是有道理的,因为打开和关闭连接需要时间),问题是它们的内存消耗逐渐增长,甚至达到 9Gigs/进程。正如您可能想象的那样,拥有 10 个这样的内存就可以填满可用的内存,并且 oom-killer 就会启动。

问题是:

  1. 如果我们使用默认配置参数,进程怎么可能分配这么多内存?
  2. 为什么这些进程不释放内存?

作为参考,可能影响内存的设置:

max_connections = 950
shared_buffers = 32MB
Run Code Online (Sandbox Code Playgroud)

所有其他设置都不会被覆盖,这意味着我们使用默认值。

postgresql linux outofmemoryerror memory-usage

3
推荐指数
1
解决办法
4214
查看次数

与 vagrant 一起使用时无法启动 postgresql

尝试在 Vagrant 管理的 Virtualbox VM 上启动 postgresql 我有以下错误:

LOG:  could not link file "pg_xlog/xlogtemp.29" to "pg_xlog/000000010000000000000001" (initialization of log file): Operation not permitted
FATAL:  could not open file "pg_xlog/000000010000000000000001": No such file or directory
Run Code Online (Sandbox Code Playgroud)

``

postgresql vagrant

3
推荐指数
1
解决办法
3979
查看次数

与 postgresql 的连接挂在 OSX 上的 SSH 隧道上

尝试连接到 OSX 上的远程 PG 服务器,但它一直超时。

首先,我设置了隧道:

ssh -L 5433:serverip:5432 user@serverip
Run Code Online (Sandbox Code Playgroud)

然后在一个单独的终端中,我尝试连接到 PG:

psql -h localhost -p 5433 -U user
Run Code Online (Sandbox Code Playgroud)

此处的连接仅持续约 3 分钟。然后我收到以下消息:

psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Run Code Online (Sandbox Code Playgroud)

在 ssh 隧道终端上,我看到的是:

channel 3: new [direct-tcpip]
(3 mins later:)channel 3: open failed: connect failed: Connection timed out
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的所有变体(localhost vs 127.0.0.1,不同的用户名)。没有任何工作。这个确切的设置在 Windows Putty 上运行良好,所以它不是服务器。我也可以在服务器上 ssh 和运行 psql,所以它不是 PG。

postgresql ssh mac-osx ssh-tunnel

3
推荐指数
1
解决办法
5002
查看次数

使用端口转发到另一台机器访问远程 PostgreSQL 服务器

我尝试访问运行 PostgreSQL的Server_A。该服务器位于本地网络上,这就是为什么我必须从可访问且位于同一网络中的Server_B转发端口。

要访问Server_B上的 postgreSQl ,我可以轻松地转发这样的端口:

ssh -L 54320:Server_A:5432 user@Server_B
Run Code Online (Sandbox Code Playgroud)

而在另一个终端:

psql -p 54320 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

我的问题是我想重现从Server_B网络中存在的机器完成的连接。这台机器可以使用以下命令将自己连接到数据库:

psql -h Server_A -p 5432 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

我实际上有问题:

我无法使用 ssh 命令转发 5432 端口:

通过插入5432:Server_A:5432ssh 命令来转发 5432 端口,我有这个错误:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我无法解析主机名:

而是直接向前从港口的SERVER_A,我尝试着从港口SERVER_B-h在参数psql …

postgresql networking ssh port-forwarding forwarding

3
推荐指数
1
解决办法
1万
查看次数

尽管磁盘使用率低,但仍诊断来自 PostgreSQL 的低磁盘空间错误

我有一个使用 PostgreSQL 9.3 数据库的 Django Web 应用程序,它偶尔会抛出错误:

File "/usr/local/my_site/.env/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/local/my_site/.env/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
OperationalError: could not write block 2432320 of temporary file: No space left on device
HINT:  Perhaps out of disk space?
Run Code Online (Sandbox Code Playgroud)

它在 EC2/RDS 上运行,我找不到任何磁盘空间不足的东西。EC2 实例有一个 9GB 驱动器,仅使用了 38%。RDS PostgreSQL 数据库有 20GB 的存储空间,只有 1% 的使用率。我认为这可能是 EC2 实例上的低 inode 问题,但df -i显示仅使用了 33%。

什么会导致这个错误?

postgresql amazon-ec2 amazon-rds postgresql-9.3

3
推荐指数
1
解决办法
1984
查看次数

尽管有足够的可用内存,但 Linux OOM 杀手仍在发挥作用

大约每周一次,OOM-killer 会在我的服务器中关闭一个 postgres 进程,尽管“免费”状态它有足够的可用内存。

我在这里和那里阅读了几个线程,但看不到任何真正的解释。难道真的是因为服务器现在已经掉呢?它是(Ubuntu)内核错误吗?

并且先发制人,是的,也许我会添加交换。但是就没有其他的解决办法了吗?或者至少解释一下?:)

服务器:物理戴尔
内存:64GB RAM 和 0 Swap
uname:Linux 服务器名称 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Postgres 版本:9.5.10(8GB 共享内存)
vm.overcommit_memory = 0

free -m在最后一次杀戮之前的输出

              可用的免费共享 buff/缓存总数
电话:64312 2666 450 8699 61196 52126
交换:0 0 0

上次杀死的内核日志

6 月 19 日 21:29:49 服务器名称内核:[17009377.877956] bash 调用 oom-killer:gfp_mask=0x26000c0,order=2,oom_score_adj=0
6 月 19 日 21:29:49 服务器名称内核:[17009377.877959] bash cpuset=/ mems_allowed=0-1
6 月 19 日 21:29:49 服务器名称内核:[17009377.877964] CPU:23 PID:61771 通讯:bash 未受污染 4.4.0-62-generic #83-Ubuntu …

postgresql linux memory virtual-memory oom

3
推荐指数
1
解决办法
2073
查看次数

PostgreSQL - 无法扩展文件设备上没有剩余空间。提示:检查可用磁盘空间

我一直在将数据插入 PostgreSQL DB,并收到错误消息:

psycopg2.OperationalError: could not extend file "base/16384/61892": No space left on device
HINT: Check free disk space
Run Code Online (Sandbox Code Playgroud)

我正在使用 CentOS 7,并且我已经在我的 linux 机器上检查了我的一些状态:

df -h

在此处输入图片说明

我对 Linux 很陌生,根据我的df -h命令的结果,我可以看到 Linux 存储系统的工作方式与 Windows 不同。

看起来 PostgreSQL 正在推送到/dev/mapper/centos-root,但它只有 50 GB 可用。

问题 1:如何更改?如何将可用的额外可用空间分配/dev/mapper/centos-home到我的~/centos-root目录中?

问题2:我的机器有两个硬盘,每个200GB。但是根据我的df-h命令,看起来我只有 200GB 可用空间。为什么会这样?如何充分利用 400GB 空间?

看起来问题是我/dev/mapper/centos-root的都填满了。我在 PostgreSQL 中插入了近 10,000,000 行 12 列的数据。

问题 3:这是否足够占用 50GB 的空间?

谢谢!

编辑:输出pvs, vgs,lvs

在此处输入图片说明

postgresql linux storage centos centos7

3
推荐指数
1
解决办法
2万
查看次数

由元组并发更新错误引起的 Postgres 崩溃循环

有时在 OpenShift 中启动 Postgres POD 时会显示以下错误代码

   pg_ctl: another server might be running; trying to start server anyway
   waiting for server to start....LOG:  redirecting log output to logging 
   collector process
   HINT:  Future log output will appear in directory "pg_log".
   ..... done
   server started
   => sourcing /usr/share/container-scripts/postgresql/start/set_passwords.sh ...
   ERROR:  tuple concurrently updated
Run Code Online (Sandbox Code Playgroud)

postgresql docker openshift-origin

3
推荐指数
1
解决办法
2033
查看次数

什么默认的 PostgreSql 密码?

我尝试使用docker只需安装此 docker 容器https://hub.docker.com/r/mdillon/postgis/ 从手册运行此命令:

docker run --name some-postgis -e POSTGRES_PASSWORD=mysecretpassword -d mdillon/postgis
Run Code Online (Sandbox Code Playgroud)

现在要输入psql

su postgres
Run Code Online (Sandbox Code Playgroud)

而我就是无法登录。我一直认为这postgres是默认密码,但不允许这样做。

我可以错过什么?

postgresql ubuntu docker

3
推荐指数
1
解决办法
7095
查看次数