Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos `pg_tblspc`在安装最新版本的OS X(约塞米蒂或El Capitan)后丢失_Macos_Postgresql_Homebrew_Osx Yosemite - Fatal编程技术网

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

Macos `pg_tblspc`在安装最新版本的OS X(约塞米蒂或El Capitan)后丢失,macos,postgresql,homebrew,osx-yosemite,Macos,Postgresql,Homebrew,Osx Yosemite,我在OS X中使用自制的postgres,但当我重新启动系统时,有时postgres在重新启动后不会启动,因此我手动尝试使用postgres-D/usr/local/var/postgres启动它,但随后出现以下错误消息:致命:无法打开目录“pg\u tblspc”:没有这样的文件或目录 上次发生时,我无法将其恢复到原始状态,因此我决定卸载整个postgres系统,然后重新安装,并创建用户、表、数据集等。。。这太恶心了,但它经常出现在我的身体上,比如说几个月一次 那么为什么它经常丢失pg_tbl

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

上次发生时,我无法将其恢复到原始状态,因此我决定卸载整个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"?
因此,如果您在优胜美地升级后刚刚体验到这一点,那么您现在可以阅读这篇文章了。

解决了。。。部分

显然,安装最新版本的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
或者,更简洁地说(感谢):

重新运行
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_twophase},pg_logical/{mappings,snapshots}}/.keep

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

创建丢失的目录当然有效,但我通过重新初始化postgres db修复了它,这是一种更干净的方法,可以避免将来出现问题

注意:此方法将删除现有数据库

$ rm -r /usr/local/var/postgres
$ initdb -D /usr/local/var/postgres

这有点离题,但值得注意的是,这是PostgreSQL Yosemite恢复过程的一部分。我遇到了与上面相同的问题,PostgreSQL“似乎”在后台运行,因此即使在添加目录后,我也无法重新启动。我尝试使用
pg_ctl stop-m fast
杀死PostgreSQL服务器,但没有成功。我还尝试直接使用
kill-PID
跟踪进程,但一完成,PostgreSQL进程就以不同的PID重新出现

密钥最终是Homebrew加载的
.plist
文件。。。我的解决办法是:

launchctl unload /Users/me/Library/LaunchAgents/homebrew.mxcl.postgresql92.plist
之后,我就可以正常启动PostgreSQL了。

的答案很准确,我只想补充一点,因为我对数据库做了不同的事情(例如,
rake db:test
),它去寻找上面没有提到的不同目录,在我的例子中,
pg_logical/mappings
,它们不存在时会阻塞,因此,您可能需要设置一个运行以下命令的终端:

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

在您执行典型的数据库活动时,查看是否有丢失的文件夹

缺少的目录需要存在于PostgreSQL数据目录中。默认数据目录是
/usr/local/var/postgres/
。如果设置了不同的数据目录,则需要重新创建缺少的目录。如果您修改了启动PostgreSQL的自制推荐的
.plist
文件,您可以在那里找到数据目录:

cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
(这是您开始postgres时使用的
-D
选项:)


我在一个停靠的Rails应用程序中遇到了这个问题

与/usr/local/var/postgres中缺少的pg_tblspc和其他目录不同,myRailsApp/tmp/db中缺少了它们

如果你想使用与多诺万类似的解决方案,你只需要修改一下就可以为你的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有一个错误,所以请仔细阅读命令行输出并根据需要进行调整。

Eep,它真的、真的不应该!当您说“最新版本”时,请显示准确的版本号。另外,您是否在外部存储上放置了表空间?PostgreSQL数据目录在哪里?另外,
pg_tblspc
是一个目录。我能看到这个目录和随机消失的目录的唯一方法是文件系统损坏或者一个特别糟糕的病毒扫描程序或文件同步工具。我没有任何病毒扫描程序。我不知道什么是
表空间,所以我不认为我把它放在了外部存储上。我所能告诉你的是,有严重的问题
pg_tblspc
不会在我遇到的任何系统上消失,我也无法想象它会消失的合理原因。如果没有更多的细节,很难说是什么让你的系统与众不同。你能找到这个@Gardecolo的解决方案吗?升级到约塞米蒂后,我也遇到了同样的问题。只是建议使用一个更简洁的命令:
mkdir-p/usr/local/var/postgres/{pg_-tblspc,pg_-twophase,pg_-stat_-tmp}/
touch/usr/local/var/postgres/{pg_-tblspc,pg_-twophase,pg_-stat_-tmp}/.keep
那些。keep文件实际上在服务器日志中给我带来了一些麻烦:
无法
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}
mkdir /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
touch /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep