我在OS X中使用brew 的postgres,但当我重新启动系统时,有时postgres在重新启动后不会启动,因此我手动try 用postgres -D /usr/local/var/postgres启动它,但随后出现错误,并显示以下消息:FATAL: could not open directory "pg_tblspc": No such file or directory.

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

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

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

编辑(mbannert):

No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

所以,如果你在优胜美地升级后刚刚体验到这一点,你现在可以阅读这篇文章了.

推荐答案

解决了的...部分原因.

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

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

mkdir -p /usr/local/var/postgres/pg_commit_ts
mkdir -p /usr/local/var/postgres/pg_dynshmem
mkdir -p /usr/local/var/postgres/pg_logical/mappings
mkdir -p /usr/local/var/postgres/pg_logical/snapshots
mkdir -p /usr/local/var/postgres/pg_replslot
mkdir -p /usr/local/var/postgres/pg_serial
mkdir -p /usr/local/var/postgres/pg_snapshots
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

或者更简洁地说(thanks to 100):

mkdir -p /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}

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

UPDATE

在我的系统中,有些目录即使在Postgres运行时也是空的.也许,作为某些"清理"操作的一部分,优胜美地删除了任何空目录?不管怎么说,我还是继续创造了一个.在每个目录中保留"文件",以防将来删除.

touch /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}/.keep

101: Creating the 100 file in those directories will create some noise in your logfile, but doesn't appear to negatively affect anything else.

Postgresql相关问答推荐

如何高效地将行聚合到数组中,同时保留`NULL`来指示丢失的数据?

Postgres 13.8 -如何在对数据执行窗口操作时返回所有行

无法在timscaleDb中创建Hypertable

使用 WHERE 子句创建递归视图

Postgres >= 和 <= 具有特殊字符的行为

PostgreSQL SELECT 结果具有不同的 id,它更喜欢来自另一个表的特定值

从具有加权行概率的 PostgreSQL 表中 Select 随机行

从 Postgres 字段中的多个值中进行 Select

SQLAlchemy 中使用什么类型存储字节字符串?

LAG 函数和 GROUP BY

PostgreSQL 可以对数组元素有唯一性约束吗?

Rails 4查询由单个属性唯一

从 PostgreSQL 中的字段中提取数字

Postgres 删除表语法错误

如何使用 node-postgres 将多行正确插入 PG?

在同一台机器上创建多个 Postgres 实例

在 postgres 中存在不同的 string_agg 问题

为什么是||在 PostgreSQL/Redshift 中用作字符串连接

PostgreSQL - 作为表名的动态值

postgres LISTEN/NOTIFY rails