검색

4.6. RHEL 9 버전의 PostgreSQL으로 마이그레이션

download PDF

Red Hat Enterprise Linux 8은 여러 모듈 스트림에 PostgreSQL 을 제공합니다. PostgreSQL 10 (기본 postgresql 스트림), PostgreSQL 9.6,PostgreSQL 12,PostgreSQL 13,PostgreSQL 15, PostgreSQL 16.

RHEL 9에서는 PostgreSQL 13,PostgreSQL 15PostgreSQL 16 을 사용할 수 있습니다.

RHEL에서는 데이터베이스 파일에 대해 두 가지 PostgreSQL 마이그레이션 경로를 사용할 수 있습니다.

빠른 업그레이드 방법은 dump 및 restore 프로세스보다 빠릅니다. 그러나 특정 경우 빠른 업그레이드가 작동하지 않으며 교차 아키텍처 업그레이드의 경우와 같이 덤프 및 복원 프로세스만 사용할 수 있습니다.

최신 버전의 PostgreSQL으로 마이그레이션하기 위한 전제 조건으로 모든 PostgreSQL 데이터베이스를 백업 합니다.

덤프 및 복원 프로세스에는 데이터베이스를 덤프하고 SQL 파일의 백업을 수행해야 하며 빠른 업그레이드 방법에 권장됩니다.

최신 버전의 PostgreSQL 으로 마이그레이션하기 전에 마이그레이션하려는 PostgreSQL 버전과 대상 버전 및 대상 버전 간의 모든 건너뛰는 PostgreSQL 버전에 대한 업스트림 호환성 노트 를 참조하십시오.

4.6.1. PostgreSQL 15와 PostgreSQL 16의 주요 차이점

PostgreSQL 16 에서는 다음과 같은 주요 변경 사항이 추가되었습니다.

postmasters 바이너리는 더 이상 사용할 수 없습니다.

PostgreSQL 은 더 이상 postmaster 바이너리와 함께 배포되지 않습니다. 제공된 systemd 장치 파일( systemctl start postgres 명령)을 사용하여 postgresql 서버를 시작하는 사용자는 이 변경의 영향을 받지 않습니다. 이전에 postmaster 바이너리를 통해 postgresql 서버를 직접 시작한 경우 대신 postgres 바이너리를 사용해야 합니다.

문서가 더 이상 패키지되지 않음

PostgreSQL 은 더 이상 패키지 내에서 PDF 형식으로 문서를 제공하지 않습니다. 대신 온라인 문서를 사용하십시오.

4.6.2. PostgreSQL 13과 PostgreSQL 15의 주요 차이점

PostgreSQL 15 에서는 이전 버전과 호환되지 않는 다음과 같은 변경 사항이 도입되었습니다.

공용 스키마의 기본 권한

공용 스키마의 기본 권한이 PostgreSQL 15 에서 수정되었습니다. 새로 생성된 사용자는 GRANT ALL ON SCHEMA public TO myuser; 명령을 사용하여 권한을 명시적으로 부여해야 합니다.

다음 예제는 PostgreSQL 13 및 이전 버전에서 작동합니다.

postgres=# CREATE USER mydbuser;
postgres=# \c postgres mydbuser
postgres=$ CREATE TABLE mytable (id int);

다음 예제는 PostgreSQL 15 이상에서 작동합니다.

postgres=# CREATE USER mydbuser;
postgres=# GRANT ALL ON SCHEMA public TO mydbuser;
postgres=# \c postgres mydbuser
postgres=$ CREATE TABLE mytable (id int);
참고

mydbuser 액세스가 pg_hba.conf 파일에 적절하게 구성되었는지 확인합니다. 자세한 내용은 PostgreSQL 사용자 생성을 참조하십시오.

PQsendQuery() 가 더 이상 파이프라인 모드에서 지원되지 않음

PostgreSQL 15 이후 libpq PQsendQuery() 기능은 더 이상 파이프라인 모드에서 지원되지 않습니다. 대신 PQsendQueryParams() 함수를 사용하도록 영향을 받는 애플리케이션을 수정합니다.

4.6.3. pg_upgrade 유틸리티를 사용한 빠른 업그레이드

시스템 관리자는 빠른 업그레이드 방법을 사용하여 PostgreSQL 의 최신 버전으로 업그레이드할 수 있습니다. 빠른 업그레이드를 수행하려면 바이너리 데이터 파일을 /var/lib/pgsql/data/ 디렉터리에 복사하고 pg_upgrade 유틸리티를 사용합니다.

이 방법을 사용하여 데이터를 마이그레이션할 수 있습니다.

  • RHEL 8 버전의 PostgreSQL 12 에서 RHEL 버전의 PostgreSQL 13으로
  • RHEL 8 또는 9 버전의 PostgreSQL 13 에서 RHEL 버전의 PostgreSQL 15
  • RHEL 8 또는 9 버전의 PostgreSQL 15 에서 RHEL 버전의 PostgreSQL 16으로

다음 절차에서는 빠른 업그레이드 방법을 사용하여 RHEL 8 버전의 PostgreSQL 12 에서 RHEL 9 버전의 PostgreSQL 13 으로의 마이그레이션을 설명합니다. 12 가 아닌 postgresql 스트림에서 마이그레이션하는 경우 다음 방법 중 하나를 사용합니다.

  • RHEL 8에서 PostgreSQL 서버를 버전 12로 업데이트한 다음 pg_upgrade 유틸리티를 사용하여 RHEL 9 버전의 PostgreSQL 13 으로 빠르게 업그레이드합니다.
  • 덤프를 사용하고 RHEL 9의 RHEL 8 버전과 동일하거나 이후의 PostgreSQL 버전 간에 직접 업그레이드하십시오.

사전 요구 사항

  • 업그레이드를 수행하기 전에 PostgreSQL 데이터베이스에 저장된 모든 데이터를 백업합니다. 기본적으로 모든 데이터는 RHEL 8 및 RHEL 9 시스템의 /var/lib/pgsql/data/ 디렉터리에 저장됩니다.

절차

  1. RHEL 9 시스템에서 postgresql-serverpostgresql-upgrade 패키지를 설치합니다.

    # dnf install postgresql-server postgresql-upgrade

    필요한 경우 RHEL 8에서 PostgreSQL 서버 모듈을 사용한 경우 두 버전의 RHEL 9 시스템에도 설치합니다. PostgreSQL 12 ( postgresql-upgrade 패키지로 설치됨)와 대상 버전의 PostgreSQL 13 ( postgresql-server 패키지로 설치됨)으로 컴파일됩니다. 타사 PostgreSQL 서버 모듈을 컴파일해야 하는 경우 postgresql- devel 및 postgresql-upgrade-devel 패키지에 대해 모두 빌드합니다.

  2. 다음 항목을 확인합니다.

    • 기본 설정: RHEL 9 시스템에서 서버가 기본 /var/lib/pgsql/data 디렉토리를 사용하는지와 데이터베이스가 올바르게 초기화되고 활성화되어 있는지 확인합니다. 또한 데이터 파일은 /usr/lib/systemd/system/postgresql.service 파일에 언급된 것과 동일한 경로에 저장해야 합니다.
    • PostgreSQL 서버: 시스템에서 여러 PostgreSQL 서버를 실행할 수 있습니다. 이러한 모든 서버의 데이터 디렉터리가 독립적으로 처리되었는지 확인합니다.
    • PostgreSQL 서버 모듈: RHEL 8에서 사용한 PostgreSQL 서버 모듈도 RHEL 9 시스템에 설치되어 있는지 확인합니다. 플러그인은 /usr/lib64/pgsql/ 디렉터리에 설치됩니다.
  3. postgresql 서비스가 데이터를 복사할 때 소스 및 대상 시스템에서 실행되지 않는지 확인합니다.

    # systemctl stop postgresql.service
  4. 소스 위치의 데이터베이스 파일을 RHEL 9 시스템의 /var/lib/pgsql/data/ 디렉터리에 복사합니다.
  5. PostgreSQL 사용자로 다음 명령을 실행하여 업그레이드 프로세스를 수행합니다.

    # postgresql-setup --upgrade

    그러면 백그라운드에서 pg_upgrade 프로세스가 시작됩니다.

    실패하는 경우 postgresql-setup 은 정보적인 오류 메시지를 제공합니다.

  6. /var/lib/pgsql/data-old 의 이전 구성을 새 클러스터로 복사합니다.

    빠른 업그레이드는 최신 데이터 스택에서 이전 구성을 재사용하지 않으며 구성이 처음부터 생성됩니다. 이전 구성과 새 구성을 수동으로 결합하려면 데이터 디렉터리에서 *.conf 파일을 사용합니다.

  7. PostgreSQL 서버를 시작합니다.

    # systemctl start postgresql.service
  8. 새 데이터베이스 클러스터를 분석합니다.

    • PostgreSQL 13 의 경우:

      su postgres -c '~/analyze_new_cluster.sh'
    • PostgreSQL 15 이상의 경우:

      su postgres -c 'vacuumdb --all --analyze-in-stages'
      참고

      REFRESH VERSION을 사용해야 할 수도 있습니다. 자세한 내용은 업스트림 문서를 참조하십시오.

  9. 부팅 시 새 PostgreSQL 서버가 자동으로 시작되도록 하려면 다음을 실행합니다.

    # systemctl enable postgresql.service

4.6.4. 업그레이드 덤프 및 복원

덤프 및 복원 업그레이드를 사용하는 경우 모든 데이터베이스의 콘텐츠를 SQL 파일 덤프 파일에 덤프해야 합니다. 덤프 및 복원 업그레이드는 빠른 업그레이드 방법보다 느리고 생성된 SQL 파일에 수동 수정이 필요할 수 있습니다.

이 방법은 RHEL 8 버전의 PostgreSQL에서 RHEL 9의 PostgreSQL 과 동일하거나 최신 버전으로 데이터를 마이그레이션하는 데 사용할 수 있습니다.

RHEL 8 및 RHEL 9 시스템에서 PostgreSQL 데이터는 기본적으로 /var/lib/pgsql/data/ 디렉터리에 저장됩니다.

덤프를 수행하고 업그레이드를 복원하려면 사용자를 root 로 변경합니다.

다음 절차에서는 RHEL 8 기본 버전의 PostgreSQL 10 에서 RHEL 9 버전의 PostgreSQL 13 으로의 마이그레이션을 설명합니다.

절차

  1. RHEL 8 시스템에서 PostgreSQL 10 서버를 시작합니다.

    # systemctl start postgresql.service
  2. RHEL 8 시스템에서 모든 데이터베이스 내용을 pgdump_file.sql 파일에 덤프합니다.

    su - postgres -c "pg_dumpall > ~/pgdump_file.sql"
  3. 데이터베이스가 올바르게 덤프되었는지 확인합니다.

    su - postgres -c 'less "$HOME/pgdump_file.sql"'

    결과적으로 덤프된 sql 파일의 경로가 /var/lib/pgsql/pgdump_file.sql 이 표시됩니다.

  4. RHEL 9 시스템에서 postgresql-server 패키지를 설치합니다.

    # dnf install postgresql-server

    필요한 경우 RHEL 8에서 PostgreSQL 서버 모듈을 사용한 경우 RHEL 9 시스템에도 설치합니다. 타사 PostgreSQL 서버 모듈을 컴파일해야 하는 경우 postgresql-devel 패키지에 대해 빌드합니다.

  5. RHEL 9 시스템에서 새 PostgreSQL 서버의 데이터 디렉터리를 초기화합니다.

    # postgresql-setup --initdb
  6. RHEL 9 시스템에서 pgdump_file.sqlPostgreSQL 홈 디렉터리에 복사하고 파일이 올바르게 복사되었는지 확인합니다.

    su - postgres -c 'test -e "$HOME/pgdump_file.sql" && echo exists'
  7. RHEL 8 시스템에서 구성 파일을 복사합니다.

    su - postgres -c 'ls -1 $PGDATA/*.conf'

    복사할 구성 파일은 다음과 같습니다.

    • /var/lib/pgsql/data/pg_hba.conf
    • /var/lib/pgsql/data/pg_ident.conf
    • /var/lib/pgsql/data/postgresql.conf
  8. RHEL 9 시스템에서 새 PostgreSQL 서버를 시작합니다.

    # systemctl start postgresql.service
  9. RHEL 9 시스템에서 덤프된 sql 파일에서 데이터를 가져옵니다.

    su - postgres -c 'psql -f ~/pgdump_file.sql postgres'
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.