Docker로 Postgresql의 12버전을 사용하고 있었는데 2021-09-30부로 14버전이 발표됐다. 이젠 12를 버리고 13으로 가야겠다 싶어 업그레이드 방법을 정리한다.
Postgresql Version
Postgresql 메이저 버전은 최근것만 정리하면 다음과 같다.
Release | First release | Latest minor version | Latest release | End of life | Milestones |
---|---|---|---|---|---|
11 | 2018-10-18 | 11.13 | 2021-08-12 | 2023-11-09 | Increased robustness and performance for partitioning, transactions supported in stored procedures, enhanced abilities for query parallelism, just-in-time (JIT) compiling for expressions |
12 | 2019-10-03 | 12.8 | 2021-08-12 | 2024-11-14 | Improvements to query performance and space utilization; SQL/JSON path expression support; generated columns; improvements to internationalization, and authentication; new pluggable table storage interface. |
13 | 2020-09-24 | 13.4 | 2021-08-12 | 2025-11-13 | Space savings and performance gains from de-duplication of B-tree index entries, improved performance for queries that use aggregates or partitioned tables, better query planning when using extended statistics, parallelized vacuuming of indexes, incremental sorting |
14 | 2021-09-30 | 14.0 | 2021-09-30 | 2026-11-12 | Added SQL-standard SEARCH and CYCLE clauses for common table expressions, allow DISTINCT to be added to GROUP BY |
15 | 2022-10-13 | 15.0 | 2022-10-13 | 2027-11-11 | Implements SQL-standard MERGE statement. PL/Python now only supports current Python 3, and plpythonu means the discontinued |
What’s New in PostgreSQL 13?
12버전도 지원기간은 많이 남았긴 한데.. 새 버전을 써보고 싶으니 업그레이드하기로 했다. 13의 특징은 다음과 같은 게 있다고 하는데 좀 더 구체적인 설명은 What’s New in PostgreSQL 13? 을 참고하자.
- Space savings and performance gains from de-duplication of B-tree index entries
- Improved performance for queries that use aggregates or partitioned tables
- Better query planning when using extended statistics
- Parallelized vacuuming of indexes
- Incremental sorting
Docker Image
Postgresql의 공식 도커이미지는 Docker Hub에서 제공하고 있고, 이미지는 다음과 같은 형식으로 제공되고 있다.
- 14.0, 14, latest, 14.0-bullseye, 14-bullseye, bullseye
- 14.0-alpine, 14-alpine, alpine, 14.0-alpine3.14, 14-alpine3.14, alpine3.14
14.0
은 마이너 버전까지 고정시켜 만든 것이고 14
는 14 릴리즈의 최신버전을 의미한다. latest
는 모든 버전중 최신버전을 의미하는데 안정성을 위해 사용은 추천하지 않는다. bullseye
는 최신 데비안인 11.0을 기반으로 만들어진 이미지이고, alpine
은 용량을 최적화한 알파인 리눅스를 기반으로 만들어진 이미지이다. 개인적으로는 14
형식의 이미지를 사용한다.
각 이미지의 디테일은 깃헙 저장소에서 확인할 수 있다.
Version upgrade
pg_upgrade
이용
Postgresql은 pg_upgrade
와 pg_upgradecluster
라는 명령어를 제공해주는데 이걸 사용하면 업그레이드를 비교적 간단하게 수행할 수 있다. 문제는 이 명령어를 사용하기 위해서는 OS에 현재버전과 업그레이드할 버전이 모두 설치되어 있어야 하기 때문에 도커에서는 사용할 수 없다는 점이다.
다만 이걸 또 도커에서 사용할 수 있게 만들어놓은 사람이 있긴 하다…
백업파일 이용
하지만 내생각에 가장 속편한 것은 그냥 이전버전에서 전체 데이터를 덤프받아 다음버전에 올려버리는 것이다. 우선 이전버전과 다음버전 컨테이너를 동시에 띄우고 다음 내용을 따라한다.
- 도커 컨테이너의 ID 확인
|
|
- 이전버전 컨테이너에서 파일 덤프
|
|
- 다음버전 컨테이너에 파일 복원
|
|
이 때 the input device is not a TTY
라고 뜨면서 입력이 안되면 다음 명령어로 직접 집어넣으면 된다.
|
|
끗.