
PostgreSQL 8.3 데이터 디렉터리 백업이 있습니다. 이 백업의 데이터베이스를 새 PostgreSQL 인스턴스로 복사해야 합니다. 이전 서버의 문제로 인해 데이터베이스의 pg_dump를 수행할 수 없습니다.
문제의 데이터베이스에 대한 디렉토리가 무엇인지 알아냈습니다. 예를 들어 MySQL에서는 일반적으로 서버를 종료하고 디렉터리를 복사한 후 다시 시작하면 데이터베이스를 사용할 수 있습니다. 이제 이것은 PostgreSQL에서는 작동하지 않으며 데이터베이스가 global/pg_database 파일에 나열되어 있지 않기 때문에 그런 것 같습니다. 이 파일은 PostgreSQL이 시작될 때 자동 생성되는 것 같습니다. 그러면 데이터베이스가 있다는 것을 시스템에 어떻게 알릴 수 있습니까?
답변1
PostgreSQL에서 클러스터 데이터 디렉터리는 설명서에 따라 부분적으로 안정적으로 복원할 수 없는 독립형 단위입니다.여기.
최선의 희망은 이전 서버의 전체 데이터 디렉터리를 사용하고 그 서버에서 서버를 시작한 다음 거기에서 얻은 데이터베이스 덤프에서 복원하는 것입니다.
- 새 호스트의 구성에 맞는 postgresql.conf를 가져옵니다(여기서 변경한 이전 파일과 새 데이터 디렉터리를 참조하세요).
- 이전 설치의 PostgreSQL 수퍼유저(대부분 postgres)의 사용자 이름을 찾으십시오.
- 이미 존재하지 않는 한 새 호스트에 이 사용자 이름(UNIX 사용자)을 생성하십시오.
- uid가 이전 서버의 uid와 일치하지 않는 한 해당 사용자에게 이전 데이터 디렉터리를 제공(chown)합니다.
- 로컬 사용자에서 동일한 postgres 사용자 이름으로의 연결을 허용하도록 이전 데이터 디렉터리에 pg_hba.conf를 구성합니다(일반적으로 기본값이지만 확인하세요).
- 이전 데이터 디렉토리의 수퍼유저와 동일한 이름을 가진 UNIX 사용자로 이전 데이터베이스 클러스터를 실행합니다(예: 사용자 postgres의 경우).
sudo -u postgres postgres -D old_data_directory # or with su: su postgres postgres -D old_data_directory
- 일반적인 사용자 이름인 postgres를 사용하여 이전 데이터베이스를 다시 덤프합니다.
sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql # becoming postgres with su analogous to above
- dump_file.sql을 새 서버의 사용자 이름 등에 맞게 조정합니다. 거기에 적절한 소유권을 가진 빈 데이터베이스를 만듭니다.
- 데이터베이스를 새 서버로 스캔합니다.
sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name # once again, getting postgres privileges using su analogous to above
그러면 최소한 거기에 도달할 수 있는 좋은 길을 보여줄 수 있을 것입니다.