`pg_tblspc`在安装最新版本的OS X(约塞米蒂或El Capitan)后丢失

我在OS X中使用自制的postgres,但当我重新启动系统时,有时postgres在重新启动后不会启动,因此我手动尝试使用postgres-D/usr/local/var/postgres启动它,但随后出现以下错误消息:致命:无法打开目录“pg\u tblspc”:没有这样的文件或目录

上次发生时,我无法将其恢复到原始状态,因此我决定卸载整个postgres系统,然后重新安装,并创建用户、表、数据集等。。。这太恶心了,但它经常出现在我的身体上,比如说几个月一次

那么为什么它经常丢失pg_tblspc文件呢?我能做些什么来避免文件丢失

我还没有将我的自制和postgres升级到最新版本(即,我一直在使用相同的版本)。此外,我在postgres数据库上做的所有事情都是每天删除表并填充新数据。我没有更改用户、密码等

编辑(mbannert):
我觉得有必要加上这个,因为这个帖子是谷歌在这个问题上最热门的,对很多人来说,症状是不同的。Homebrewers可能会遇到以下错误消息:

没有这样的文件或目录
服务器是否在本地运行并接受
Unix域套接字上的连接“/tmp/.s.PGSQL.5432”?

因此,如果您在优胜美地升级后刚刚体验到这一点,那么您现在可以阅读这篇文章了

解决了。。。部分

显然,安装最新版本的OS X(例如Yosemite或El Capitan)会删除/usr/local/var/postgres中的一些目录

要修复此问题,只需重新创建丢失的目录:

mkdir-p/usr/local/var/postgres/pg\u commit\ts
mkdir-p/usr/local/var/postgres/pg_dynshmem
mkdir-p/usr/local/var/postgres/pg_逻辑/映射
mkdir-p/usr/local/var/postgres/pg_逻辑/快照
mkdir-p/usr/local/var/postgres/pg_replslot
mkdir-p/usr/local/var/postgres/pg_serial
mkdir-p/usr/local/var/postgres/pg_快照
mkdir-p/usr/local/var/postgres/pg_stat
mkdir-p/usr/local/var/postgres/pg_stat_tmp
mkdir-p/usr/local/var/postgres/pg_tblspc
mkdir-p/usr/local/var/postgres/pg_twophase

或者,更简洁地说(多亏了Nate):

mkdir-p/usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_tmp,pg_tblspc,pg_twoophase},pg_logical/{映射,snapshots}

重新运行pg_ctl start-D/usr/local/var/postgres现在可以正常启动服务器,至少对我来说,不会丢失任何数据

更新

在我的系统中,有些目录即使在Postgres运行时也是空的。也许,作为“某些”的一部分;“清洁”;操作,优胜美地删除任何空目录?无论如何,我还是继续在每个目录中创建了一个“.keep”文件,以防止将来删除

touch/usr/local/var/postgres/{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twoophase},pg_logical/{mappings,snapshots}/}保持

注意:在这些目录中创建.keep文件会在日志文件中产生一些噪音,但不会对其他任何内容产生负面影响。

发表评论