programing

최신 버전의 OS X(요세미티 또는 엘 캐피탄)를 설치한 후 "pg_tblspc"가 없습니다.

kakaobank 2023. 5. 2. 22:53
반응형

최신 버전의 OS X(요세미티 또는 엘 캐피탄)를 설치한 후 "pg_tblspc"가 없습니다.

되지 않는 수동으로 X 홈브시사재포스을템부재팅서하면후부했않시있다니수습려하고작로으동경어가우는시지포되작가그트스팅스용에만를하그트루의지▁os▁tried▁i▁it▁x▁withg,g▁to▁start했▁manually시brew다니습▁x▁my▁post려고하작수로으동있▁home▁so▁and▁in▁but,▁post▁os▁from▁use어▁when,서▁doesn▁system▁after가경res▁ipostgres -D /usr/local/var/postgres 다음과 같은했습니다.FATAL: could not open directory "pg_tblspc": No such file or directory.

마지막으로 발생했을 때 원래 상태로 되돌릴 수 없었기 때문에 전체 postgres 시스템을 제거하고 다시 설치하여 사용자, 테이블, 데이터 세트 등을 만들었습니다.그것은 너무 역겨웠지만, 몇 달에 한 번 꼴로 제 몸에서 자주 발생합니다.

그렇다면 왜 그것은 그것을 잃을까요?pg_tblspc파일을 자주 사용하시겠습니까?그리고 파일 손실을 방지하기 위해 제가 할 수 있는 일이 있습니까?

홈브루와 포스트그를 최신 버전으로 업그레이드하지 않았습니다(즉, 동일한 버전을 사용하고 있습니다).또한 postgres 데이터베이스에서 제가 한 모든 작업은 테이블을 삭제하고 매일 새로운 데이터를 채우는 것입니다.사용자, 암호 등을 변경하지 않았습니다.

편집(mbannert):스레드가 이 문제에 대해 구글에서 최고의 히트를 치고 있고 많은 사람들에게 증상이 다르기 때문에 저는 이것을 추가해야 할 필요성을 느꼈습니다.홈브루어는 다음과 같은 오류 메시지가 나타날 수 있습니다.

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

요세미티 업그레이드 후에 이 문제를 경험했다면 지금은 이 스레드를 읽는 것으로 끝납니다.

해결됨...부분적으로

X 엘 하면 최신버 OS X(예: 요세미티 엘 캐피탄)에서 디렉토리가 /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

또는 보다 간결하게(Nate 덕분):

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가 실행 중일 때도 비어 있습니다.어쩌면 "청소" 작업의 일환으로 요세미티가 빈 디렉토리를 제거하는 것이 아닐까요?어쨌든, 저는 나중에 삭제되지 않도록 각 디렉터리에 '.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이러한 디렉토리의 파일은 로그 파일에 노이즈를 발생시키지만 다른 어떤 것에도 부정적인 영향을 미치지는 않는 것으로 보입니다.

Donavan의 대답은 정확합니다. 데이터베이스에서 다른 작업을 수행했기 때문에 추가하고 싶었습니다(예:rake db:test), 위에서 언급되지 않은 다른 디렉터리를 찾아다녔고, 제 경우에는 해당 디렉터리가 없을 때 숨이 막힐 수 있습니다.pg_logical/mappings따라서 다음을 실행하는 터미널을 설정할 수 있습니다.

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

일반적인 데이터베이스 작업을 수행하는 동안 누락된 폴더를 확인할 수 있습니다.

이것은 약간 주제에서 벗어났지만 Postgre의 일부로서 여기서 주목할 가치가 있습니다.SQL 요세미티 복구 프로세스.저는 위와 같은 문제가 있었고 Postgre와 문제가 있었습니다.SQL이 백그라운드에서 실행되는 것처럼 보여서 디렉터리를 추가한 후에도 다시 시작할 수 없었습니다.사용해 보았습니다.pg_ctl stop -m fast포스트그리를 죽입니다SQL 서버에 오류가 있습니다.저는 또한 그 과정을 직접적으로 진행하려고 노력했습니다.kill PID하지만 내가 그것을 하자마자 포스트그리.SQL 프로세스가 다른 PID로 다시 나타납니다.

그 열쇠는 결국..plist홈브루가 로드한 파일은...결국 저를 위한 해결책은 다음과 같습니다.

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

그 후 저는 Postgre를 시작할 수 있었습니다.SQL 정상입니다.

누락된 디렉터리는 Postgre에 있어야 합니다.SQL 데이터 디렉터리입니다.기본 데이터 디렉토리는 다음과 같습니다./usr/local/var/postgres/다른 데이터 디렉토리를 설정한 경우, 누락된 디렉토리를 그곳에 다시 만들어야 합니다.홈브루 추천 제품을 수정한 경우.plistPostgre를 시작하는 파일SQL에서 데이터 디렉토리를 찾을 수 있습니다.

cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

(그것은-D»에서 postgres를 시작한 옵션

  <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}

도커화된 Rails 애플리케이션에서 이 문제가 발생했습니다.

pg_tblspc 및 /usr/local/var/postgres에서 누락된 다른 디렉토리 대신 myRailsApp/tmp/db에서 누락되었습니다.

비슷한 버전의 도노반 솔루션을 사용하려면 Rails 앱에 맞는 경로를 변경해야 합니다.

mkdir /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/

또한 git가 빈 디렉토리를 무시하지 않도록 .keep 파일을 추가해야 합니다.

touch /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep

디렉터리 중 하나에서 .keep에 오류가 있는 것을 발견했으므로 명령줄 출력을 주의 깊게 읽고 필요에 따라 조정하십시오.

누락된 디렉터리를 생성하는 것은 확실히 효과가 있지만 postgresdb를 다시 초기화하여 수정했습니다. 이 방법은 향후 문제를 방지하는 더 깨끗한 방법입니다.

참고: 이 접근 방식은 기존 데이터베이스를 삭제합니다.

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

언급URL : https://stackoverflow.com/questions/25970132/pg-tblspc-missing-after-installation-of-latest-version-of-os-x-yosemite-or-el

반응형