PostgreSQLのサーバ側と、手元のクライアント側でバージョンの不整合があり
dumpしたデータの取り込みに問題が生じたために、サーバ・クライントでバージョンを合わせたいと考えた。
Macを使っている場合はbrewで過去バージョンを入れることも検討されるが
brewの過去をチェックアウトするような方法1が必要なようで面倒に感じた。
今回は、Dockerを使用して環境構築を行うことにした。
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install wget ca-certificates gnupg2 -y
RUN sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
RUN cat /etc/apt/sources.list.d/pgdg.list
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get update
RUN apt install postgresql-client-11 -y
RUN pg_basebackup -V
ENV DEBIAN_FRONTEND noninteractive
はtzdataインストールで止まるときの対策2です。
他の大部分の記述は apt-get にない postgresql-client-11 を使えるようにしています。
https://wiki.postgresql.org/wiki/Apt にコードの記載があります。
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
という記載がありますが lsb_release が動かないこともあり
20.04では実際に上手くこのままでは動作しませんでした。
Ubuntu 16.04 (xenial), 18.04 (bionic), 20.04 (focal), 20.10 (groovy, amd64 only)
20.04は先程のURLは記載の通り、focalであることが分かっていますので
RUN sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
と書き換えました。
またsudoがRUNでは動かないようでしたのでsudoを消して記述を行いました。