Я использую Postgres из доморощенных в моем OS X, но когда я перезагружать систему, иногда Postgres не запускается после перезагрузки, и поэтому я вручную попытался запустить его с postgres -D /usr/local/var/postgres
, но затем произошла ошибка со следующим сообщением: FATAL: could not open directory "pg_tblspc": No such file or directory
.
В последний раз, когда это произошло, я не смог вернуть его в исходное состояние, поэтому я решил удалить всю систему postgres, а затем переустановить ее и создать пользователей, таблицы, наборы данных и т. Д. Это было так отвратительно, но это часто происходит в моей системе, скажем, раз в несколько месяцев.
Так почему же он pg_tblspc
часто теряет файл? И что я могу сделать, чтобы избежать потери файла?
Я не обновил мой homebrew и postgres до последней версии (то есть я использовал ту же версию). Кроме того, все, что я делал в базе данных postgres, - это удаление таблицы и заполнение новых данных каждый день. Я не менял пользователя, пароль и т.д ...
РЕДАКТИРОВАТЬ (mbannert): я чувствовал необходимость добавить это, так как эта тема является главным хитом в Google для этой проблемы, и для многих симптом другой. Домашние пивовары, вероятно, столкнутся с этим сообщением об ошибке:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Итак, если вы только что испытали это после апгрейда Yosemite, то теперь вы можете прочитать эту ветку.
источник
pg_tblspc
есть каталог . Единственный способ, которым я вижу этот каталог и только этот каталог, случайно исчезающий, - это повреждение файловой системы или особенно плохо ведущий себя сканер вирусов или инструмент синхронизации файлов.tablespaces
, поэтому я не думаю, что я положил его на внешнее хранилище.pg_tblspc
не исчезает ни в одной из систем, с которыми я когда-либо сталкивался, и я не могу представить себе здравой причины. Будет очень трудно сказать, что отличает вашу систему без дополнительных подробностей.Ответы:
Решено ... частично.
Очевидно, установка последних версий OS X (например, Yosemite или El Capitan) удаляет некоторые каталоги в
/usr/local/var/postgres
.Чтобы это исправить, вы просто воссоздаете недостающие каталоги:
Или более кратко ( спасибо Нейту ):
Rerunning
pg_ctl start -D /usr/local/var/postgres
теперь запускает сервер нормально и, по крайней мере для меня, без потери данных.ОБНОВИТЬ
В моей системе некоторые из этих каталогов пусты даже во время работы Postgres. Может быть, в рамках некоторой операции «очистки» Yosemite удаляет все пустые каталоги? В любом случае я решил создать файл «.keep» в каждом каталоге, чтобы предотвратить его удаление в будущем.
Примечание . Создание
.keep
файла в этих каталогах создаст некоторый шум в вашем лог-файле, но, похоже, не окажет негативного влияния на что-либо еще.источник
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
could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
Ответ Донавана точен , я просто хотел добавить, что, поскольку я делал разные вещи с базой данных (например
rake db:test
), он искал разные каталоги, которые не были упомянуты выше, и задыхался, когда их не было, в В моем случаеpg_logical/mappings
вы можете настроить работающий терминал:и наблюдайте за отсутствующими папками, пока вы выполняете обычные действия с базой данных.
источник
Это немного не по теме, но стоит отметить это как часть процесса восстановления PostgreSQL Yosemite. У меня была та же проблема, что и выше, И у меня была проблема с PostgreSQL, «по-видимому» работающим в фоновом режиме, поэтому даже после добавления каталогов я не мог перезапустить. Я пытался использовать,
pg_ctl stop -m fast
чтобы убить сервер PostgreSQL, но не повезло. Я также попытался выполнить этот процесс напрямую,kill PID
но как только я это сделал, процесс PostgreSQL снова появился с другим PID.Ключ оказался
.plist
файлом, который загрузил Homebrew ... Исправление для меня закончилось так:После этого я смог нормально запустить PostgreSQL.
источник
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
но в принципе это была та же проблема для меня, и то же решение.Отсутствующие каталоги должны присутствовать в вашем каталоге данных PostgreSQL. Каталог данных по умолчанию
/usr/local/var/postgres/
. Если вы установили другой каталог данных, вам нужно заново создать отсутствующие каталоги там. Если вы изменили.plist
файл, рекомендуемый для homebrew, который запускает PostgreSQL, вы можете найти каталог данных там:(это
-D
вариант, с которого вы начали postgres :)В приведенном выше примере вы создадите отсутствующие каталоги
/usr/local/pgsql/data
, например, так:источник
Создание отсутствующих каталогов, безусловно, работает, но я исправил это путем повторной инициализации postgres db, это более чистый подход, чтобы избежать будущих проблем.
ПРИМЕЧАНИЕ. При таком подходе удаляются существующие базы данных.
источник