1. ホーム
  2. macos

[解決済み] 最新バージョンのOS X (Yosemite または El Capitan) をインストールした後に `pg_tblspc` が見つからない。

2022-03-21 23:14:19

質問

OS Xでhomebrewの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のデータベースで行ったことは、毎日テーブルを削除して新しいデータを投入することだけです。ユーザーやパスワードなどは変更していません...。

EDIT (mbannert)です。 このスレッドはgoogleでこの問題のトップヒットであり、多くの人にとって症状が異なるため、これを追加する必要があると感じました。自作派はこのエラーメッセージに遭遇する可能性が高いです。

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

Yosemiteアップグレード後にこの問題が発生した場合、このスレッドを読むことで今のところカバーされています。

解決方法は?

解決した...一部ですが。

どうやら、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

あるいは、もっと簡潔に( おかげさまで ネイト ):

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 を実行すると、サーバーが正常に起動し、少なくとも私の場合は、データの損失はありませんでした。

アップデイト

私のシステムでは、Postgresの実行中であっても、これらのディレクトリのいくつかは空です。 もしかしたら、Yosemiteがクリーニングの一環として、空のディレクトリを削除しているのでしょうか?いずれにせよ、将来的に削除されないように、各ディレクトリに'.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 ファイルをこれらのディレクトリに置くと、ログファイルにノイズが発生しますが、他のものには悪影響はないようです。