安装最新版OS X(Yosemite或El Capitan)后缺少`pg_tblspc`

 冷恋企鹅 发布于 2022-12-20 12:25

我在OS X中使用自制程序中的postgres,但是当我重新启动系统时,有时postgres在重新启动后没有启动,所以我手动尝试启动它postgres -D /usr/local/var/postgres,但随后发生了以下消息的错误:FATAL: could not open directory "pg_tblspc": No such file or directory.

它最后一次发生时,我无法将其恢复到原始状态,所以我决定卸载整个postgres系统,然后重新安装它并创建用户,表格,数据集等等......真是太恶心了,但是它经常发生在我的系统上,比如几个月就会发生一次.

那为什么它pg_tblspc经常丢失文件?我有什么办法可以避免丢失文件吗?

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

编辑(mbannert):我觉得有必要添加这个,因为这个问题对谷歌来说是最受欢迎的,而且很多症状都不同.Homebrewers可能会遇到此错误消息:

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

所以,如果你刚刚在优胜美地升级之后经历过这个,那么现在你已经开始阅读这个帖子了.

3 个回答
  • 解决了...部分.

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

    要解决此问题,您只需重新创建缺少的目录:

    mkdir /usr/local/var/postgres/pg_tblspc
    mkdir /usr/local/var/postgres/pg_twophase
    mkdir /usr/local/var/postgres/pg_stat
    mkdir /usr/local/var/postgres/pg_stat_tmp
    mkdir /usr/local/var/postgres/pg_replslot
    mkdir /usr/local/var/postgres/pg_snapshots
    

    或者,更简洁(感谢Nate):

    mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
    

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

    UPDATE

    在我的系统上,即使Postgres正在运行,其中一些目录也是空的.也许,作为一些"清理"操作的一部分,Yosemite删除任何空目录?无论如何,我继续在每个目录中创建一个".keep"文件,以防止将来删除.

    touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep
    

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

    2022-12-20 12:28 回答
  • 多纳万的回答是现实的,我只是想补充一点,因为我对数据库做了不同的事情(例如rake db:test),它寻找上面没有提到的不同目录,当它们不存在时会窒息,我的情况pg_logical/mappings,所以你可能想设置一个终端运行:

    tail -f /usr/local/var/postgres/server.log
    

    通过典型的数据库活动观察丢失的文件夹.

    2022-12-20 12:28 回答
  • 这稍微偏离主题,但值得注意的是PostgreSQL Yosemite恢复过程的一部分.我有与上面相同的问题,我遇到了PostgreSQL"貌似"在后台运行的问题所以即使在添加目录后我也无法重启.我试图pg_ctl stop -m fast用来杀死PostgreSQL服务器,但没有运气.我也尝试直接使用该过程,kill PID但是一旦我这样做,PostgreSQL进程就会重新出现一个不同的PID.

    该密钥最终成为.plistHomebrew已加载的文件...对我的修复最终成为:

    launchctl unload /Users/me/Library/LaunchAgents/homebrew.mxcl.postgresql92.plist
    

    之后,我能够正常启动PostgreSQL.

    2022-12-20 12:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有