我计划更新当前在 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:什么标签适合向后兼容性问题?
我们有一个 postgres 9.0 实例,它运行在一台非常强大的机器上(96G RAM/24 个内核)。最近几周,我们经历了由于 OOM 杀手因内存不足而杀死 postgres 子进程而导致的崩溃。似乎由于使用连接池,这些子进程寿命很长(这是有道理的,因为打开和关闭连接需要时间),问题是它们的内存消耗逐渐增长,甚至达到 9Gigs/进程。正如您可能想象的那样,拥有 10 个这样的内存就可以填满可用的内存,并且 oom-killer 就会启动。
问题是:
作为参考,可能影响内存的设置:
max_connections = 950
shared_buffers = 32MB
Run Code Online (Sandbox Code Playgroud)
所有其他设置都不会被覆盖,这意味着我们使用默认值。
尝试在 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)
``
尝试连接到 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的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)
我实际上有问题:
通过插入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 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%。
什么会导致这个错误?
大约每周一次,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 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
有时在 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) 我尝试使用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 ×10
linux ×3
docker ×2
ssh ×2
amazon-ec2 ×1
amazon-rds ×1
centos ×1
centos7 ×1
forwarding ×1
mac-osx ×1
memory ×1
memory-usage ×1
networking ×1
oom ×1
ssh-tunnel ×1
storage ×1
ubuntu ×1
upgrade ×1
vagrant ×1