PostgreSQL을 Arch Linux에 다시 설치한 후에도 여전히 시작되지 않습니다.

PostgreSQL을 Arch Linux에 다시 설치한 후에도 여전히 시작되지 않습니다.

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의 주요 버전을 업그레이드하는 경우 데이터베이스 데이터가 새 버전과 호환되는지 확인해야 합니다.

아치 리눅스는 다음을 제공합니다위키 항목은 이 상황에 대한 것입니다., 단계는 다음과 같이 요약됩니다.

  1. 데이터베이스 데이터 백업
  2. initdb초기 데이터베이스를 생성하는 데 사용된 매개변수를 검색해 보십시오.
  3. 멈추다postgresql.service
  4. 모든 PostgreSQL 패키지 업그레이드
  5. 이전 데이터베이스 업그레이드에서 기존 데이터를 삭제합니다.
  6. 데이터베이스 데이터를 임시 위치로 이동하고 업그레이드된 데이터베이스를 저장할 새 디렉터리를 만듭니다.
  7. initdb원본 데이터베이스와 동일한 매개변수를 사용하여 새 데이터베이스를 초기화합니다.
  8. 이전 데이터베이스 업그레이드pg_upgrade
  9. 시작postgresql.service

오류가 없으면 이제 PostgreSQL 데이터베이스 서버가 업그레이드된 데이터베이스로 실행되고 있어야 합니다. 원하는 경우 이제 이전 데이터와 임시 디렉터리를 정리할 수 있습니다.

답변2

@GracefulRestart의 일부 의견에 따르면 마침내 나에게 도움이 된 것은일부단계8.1pg_upgrade부분:

  1. 설치postgresql-old-upgrade
  2. 이전 클러스터 디렉터리의 이름을 바꾼 다음 새 클러스터와 임시 작업 디렉터리를 만듭니다.
    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
    
  3. 이전 클러스터와 동일한 initdb 매개변수를 사용하여 새 클러스터를 초기화합니다.
    [postgres]$ initdb -D /var/lib/postgres/data --locale=C.UTF-8 --encoding=UTF8 --data-checksums
    

관련 정보