4.6. RHEL 9 버전의 PostgreSQL으로 마이그레이션
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 15 및 PostgreSQL 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/
디렉터리에 저장됩니다.
절차
RHEL 9 시스템에서
postgresql-server
및postgresql-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
다음 항목을 확인합니다.
-
기본 설정: RHEL 9 시스템에서 서버가 기본
/var/lib/pgsql/data
디렉토리를 사용하는지와 데이터베이스가 올바르게 초기화되고 활성화되어 있는지 확인합니다. 또한 데이터 파일은/usr/lib/systemd/system/postgresql.service
파일에 언급된 것과 동일한 경로에 저장해야 합니다. - PostgreSQL 서버: 시스템에서 여러 PostgreSQL 서버를 실행할 수 있습니다. 이러한 모든 서버의 데이터 디렉터리가 독립적으로 처리되었는지 확인합니다.
-
PostgreSQL 서버 모듈: RHEL 8에서 사용한 PostgreSQL 서버 모듈도 RHEL 9 시스템에 설치되어 있는지 확인합니다. 플러그인은
/usr/lib64/pgsql/
디렉터리에 설치됩니다.
-
기본 설정: RHEL 9 시스템에서 서버가 기본
postgresql
서비스가 데이터를 복사할 때 소스 및 대상 시스템에서 실행되지 않는지 확인합니다.# systemctl stop postgresql.service
-
소스 위치의 데이터베이스 파일을 RHEL 9 시스템의
/var/lib/pgsql/data/
디렉터리에 복사합니다. PostgreSQL 사용자로 다음 명령을 실행하여 업그레이드 프로세스를 수행합니다.
# postgresql-setup --upgrade
그러면 백그라운드에서
pg_upgrade
프로세스가 시작됩니다.실패하는 경우
postgresql-setup
은 정보적인 오류 메시지를 제공합니다./var/lib/pgsql/data-old
의 이전 구성을 새 클러스터로 복사합니다.빠른 업그레이드는 최신 데이터 스택에서 이전 구성을 재사용하지 않으며 구성이 처음부터 생성됩니다. 이전 구성과 새 구성을 수동으로 결합하려면 데이터 디렉터리에서 *.conf 파일을 사용합니다.
새 PostgreSQL 서버를 시작합니다.
# systemctl start postgresql.service
새 데이터베이스 클러스터를 분석합니다.
PostgreSQL 13 의 경우:
su postgres -c '~/analyze_new_cluster.sh'
PostgreSQL 15 이상의 경우:
su postgres -c 'vacuumdb --all --analyze-in-stages'
참고REFRESH VERSION을 사용해야 할
수도 있습니다. 자세한 내용은 업스트림 문서를 참조하십시오.
부팅 시 새 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 으로의 마이그레이션을 설명합니다.
절차
RHEL 8 시스템에서 PostgreSQL 10 서버를 시작합니다.
# systemctl start postgresql.service
RHEL 8 시스템에서 모든 데이터베이스 내용을
pgdump_file.sql
파일에 덤프합니다.su - postgres -c "pg_dumpall > ~/pgdump_file.sql"
데이터베이스가 올바르게 덤프되었는지 확인합니다.
su - postgres -c 'less "$HOME/pgdump_file.sql"'
결과적으로 덤프된 sql 파일의 경로가
/var/lib/pgsql/pgdump_file.sql
이 표시됩니다.RHEL 9 시스템에서
postgresql-server
패키지를 설치합니다.# dnf install postgresql-server
필요한 경우 RHEL 8에서 PostgreSQL 서버 모듈을 사용한 경우 RHEL 9 시스템에도 설치합니다. 타사 PostgreSQL 서버 모듈을 컴파일해야 하는 경우
postgresql-devel
패키지에 대해 빌드합니다.RHEL 9 시스템에서 새 PostgreSQL 서버의 데이터 디렉터리를 초기화합니다.
# postgresql-setup --initdb
RHEL 9 시스템에서
pgdump_file.sql
을 PostgreSQL 홈 디렉터리에 복사하고 파일이 올바르게 복사되었는지 확인합니다.su - postgres -c 'test -e "$HOME/pgdump_file.sql" && echo exists'
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
-
RHEL 9 시스템에서 새 PostgreSQL 서버를 시작합니다.
# systemctl start postgresql.service
RHEL 9 시스템에서 덤프된 sql 파일에서 데이터를 가져옵니다.
su - postgres -c 'psql -f ~/pgdump_file.sql postgres'