我在我的OS X中使用自制的postgres,但当我重新启动系统时,有时postgres在重新启动后不会启动,所以我手动尝试用postgres -D /usr/local/var/postgres启动它,但随后出现以下错误消息:FATAL: could not open directory "pg_tblspc":没有这样的文件或目录。
上次出现这种情况时,我无法恢复到原来的状态,所以我决定卸载整个postgres系统,然后重新安装,并创建用户、表、数据集等等……这是如此恶心,但它经常发生在我的系统,比如几个月一次。
那么为什么它经常丢失pg_tblspc文件呢?我能做些什么来避免文件丢失吗?
我还没有把我的自制和postgres升级到最新版本(也就是说,我一直在使用同一个版本)。此外,我在postgres数据库上所做的所有事情就是每天删除表并填充新数据。我还没有更改用户、密码等。
编辑(mbannert):
我觉得有必要添加这个,因为这个线程是谷歌上这个问题的顶部,而且对于许多症状是不同的。自制啤酒可能会遇到以下错误信息:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
所以,如果你在优胜美地升级后经历了这个,你现在可以阅读这篇文章了。
我在一个dockerized Rails应用程序中遇到了这个问题。
而不是pg_tblspc和其他目录在/usr/local/var/postgres中缺失,他们在myRailsApp/tmp/db中缺失。
你会想要使用Donovan的解决方案的类似版本,你只需要改变你的Rails应用程序的正确路径…
mkdir /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
此外,您还需要添加一个.keep文件,以确保git不会忽略空目录。
touch /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep
我注意到其中一个目录中有一个.keep错误,所以只需仔细阅读命令行输出并根据需要进行调整。
缺失的目录需要出现在PostgreSQL数据目录中。默认数据目录为/usr/local/var/postgres/。如果设置了不同的数据目录,则需要在那里重新创建丢失的目录。如果你修改了homebrew推荐的启动PostgreSQL的.plist文件,你可以在那里找到数据目录:
cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
(这是你启动postgres的-D选项:)
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/postgres</string>
<string>-D</string>
<string>/usr/local/pgsql/data</string>
在上面的例子中,你会在/usr/local/pgsql/data中创建缺失的目录,如下所示:
cd /usr/local/pgsql/data
mkdir {pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots,pg_logical}
mkdir pg_logical/{snapshots,mappings}