Arch Linux 데스크톱에서 PostgreSQL을 마지막으로 사용한 지 몇 달이 지났는데, 몇 가지 업데이트 후에 뭔가 문제가 발생한 것 같습니다. 내가 받은 서비스의 상태를 묻는다면 ( systemctl status postgresql
):
× postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: disabled)
Active: failed (Result: exit-code) since Wed 2024-02-21 16:00:22 -03; 1h 28min ago
CPU: 54ms
fev 21 16:00:22 phili systemd[1]: Starting PostgreSQL database server...
fev 21 16:00:22 phili postgres[11667]: An old version of the database format was found.
fev 21 16:00:22 phili postgres[11667]: See https://wiki.archlinux.org/index.php/PostgreSQL#>
fev 21 16:00:22 phili systemd[1]: postgresql.service: Control process exited, code=exited, >
fev 21 16:00:22 phili systemd[1]: postgresql.service: Failed with result 'exit-code'.
fev 21 16:00:22 phili systemd[1]: Failed to start PostgreSQL database server.
다양한 방법으로 재설치를 시도했습니다. 그러나 중요한 것은 이것이다:
pacman -Rsn postgresql
rm -rf /var/lib/postgres
pacman -Syu postgresql
제가 설치하는 버전은 최신 16인데 14에서 다 사용해 봤습니다. 예, 컴퓨터를 여러 번 다시 시작해 보았습니다.
답변1
PostgreSQL 데이터베이스를 초기화하면 데이터베이스 데이터가 PostgreSQL의 주요 버전으로 잠깁니다.
PostgreSQL의 주요 버전을 업그레이드하는 경우 데이터베이스 데이터가 새 버전과 호환되는지 확인해야 합니다.
아치 리눅스는 다음을 제공합니다위키 항목은 이 상황에 대한 것입니다., 단계는 다음과 같이 요약됩니다.
- 데이터베이스 데이터 백업
initdb
초기 데이터베이스를 생성하는 데 사용된 매개변수를 검색해 보십시오.- 멈추다
postgresql.service
- 모든 PostgreSQL 패키지 업그레이드
- 이전 데이터베이스 업그레이드에서 기존 데이터를 삭제합니다.
- 데이터베이스 데이터를 임시 위치로 이동하고 업그레이드된 데이터베이스를 저장할 새 디렉터리를 만듭니다.
initdb
원본 데이터베이스와 동일한 매개변수를 사용하여 새 데이터베이스를 초기화합니다.- 이전 데이터베이스 업그레이드
pg_upgrade
- 시작
postgresql.service
오류가 없으면 이제 PostgreSQL 데이터베이스 서버가 업그레이드된 데이터베이스로 실행되고 있어야 합니다. 원하는 경우 이제 이전 데이터와 임시 디렉터리를 정리할 수 있습니다.
답변2
@GracefulRestart의 일부 의견에 따르면 마침내 나에게 도움이 된 것은일부단계8.1pg_upgrade
부분:
- 설치
postgresql-old-upgrade
- 이전 클러스터 디렉터리의 이름을 바꾼 다음 새 클러스터와 임시 작업 디렉터리를 만듭니다.
mv /var/lib/postgres/data /var/lib/postgres/olddata mkdir /var/lib/postgres/data /var/lib/postgres/tmp chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
- 이전 클러스터와 동일한 initdb 매개변수를 사용하여 새 클러스터를 초기화합니다.
[postgres]$ initdb -D /var/lib/postgres/data --locale=C.UTF-8 --encoding=UTF8 --data-checksums