PostgreSQL Debianリポジトリを追加して最新版を利用する~Debian11で、Postgres15をパッケージ管理する~

Linux

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

できるだけサポート期間を長くしたい

Debianのパッケージ管理を利用してPostgreSQLを利用してます。 2023/2/20 現在、Debian11 標準のaptソース上でapt-getできるPostgreSQLパッケージは13です。

PosgreSQLのバージョンが上がると、周りのアプリケーションも動くかどうか気を使わないといけないので、できたら構築する際に最新のもので利用したいです。

現在のPostgreSQL最新バージョンは15

パッケージ管理を選ぶのか、それとも、ソースをダウンロードコンパイルして利用するかちょっと悩みました。ソースをダウンロードコンパイルして利用すると、アップデート管理は自分で面倒みなくてはいけない。

パッケージ管理なら apt-get update で全部パッチがあたるので。できればパッケージ管理で運用負荷を減らしたいという思いです。

Debian上で全Postgresバージョンをパッケージ管理する方法がある

実は、最新のPostgresをパッケージ管理できるリポジトリがあります。

リポジトリとは「収納庫」を意味し、パッケージが入っている場所の事を意味しています。

PostgreSQL は、デフォルトですべての Debian バージョンで利用できます。ただし、Debian の安定版は、特定のバージョンの PostgreSQL を「スナップショット」し、その Debian バージョンの存続期間を通じてサポートされます。PostgreSQL プロジェクトは、サポートされているすべての PostgreSQL が利用可能なapt リポジトリも維持しています。

PostgreSQL Apt リポジトリ

このリポジトリは、通常のシステムおよびパッチ管理と統合され、 PostgreSQL の サポート期間中、サポートされているすべてのバージョンの PostgreSQL の自動更新を提供します。

なんとも理想通りのリポジトリを posdtgresql.org で提供してくれています。

リポジトリの追加手順

リポジトリの追加手順は以下の通りです。

apt-get install wget curl gnupg2 -y
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update

apt-cache search postgres

で検索すると、バージョン9からバージョン15までapt-getできるようになっている事が分かります。

# apt-cache show postgresql-15
Package: postgresql-15
Version: 15.2-1.pgdg110+1
Architecture: amd64
Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>
Installed-Size: 51919
Depends: locales | locales-all, postgresql-client-15, postgresql-common (>= 241~), ssl-cert, tzdata, debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.29), libgcc-s1 (>= 3.0), libgssapi-krb5-2 (>= 1.14+dfsg), libicu67 (>= 67.1-1~), libldap-2.4-2 (>= 2.4.7), libllvm11 (>= 1:9~svn298832-1~), liblz4-1 (>= 0.0~r130), libpam0g (>= 0.99.7.1), libpq5 (>= 14~beta2), libselinux1 (>= 3.1~), libssl1.1 (>= 1.1.0), libstdc++6 (>= 5.2), libsystemd0, libuuid1 (>= 2.16), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25), libzstd1 (>= 1.4.0), zlib1g (>= 1:1.1.4)

postgresql-15のインストール

上記、リポジトリの追加ができていたら、後の手順は簡単です。

# apt-get install postgresql-15
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libcommon-sense-perl libjson-perl libjson-xs-perl libllvm11 libpq5 libsensors-config libsensors5 libtypes-serialiser-perl libxslt1.1 libz3-4 postgresql-client-15
  postgresql-client-common postgresql-common ssl-cert sysstat
提案パッケージ:
  lm-sensors postgresql-doc-15 isag
以下のパッケージが新たにインストールされます:
  libcommon-sense-perl libjson-perl libjson-xs-perl libllvm11 libpq5 libsensors-config libsensors5 libtypes-serialiser-perl libxslt1.1 libz3-4 postgresql-15
  postgresql-client-15 postgresql-client-common postgresql-common ssl-cert sysstat
アップグレード: 0 個、新規インストール: 16 個、削除: 0 個、保留: 3 個。
44.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 174 MB のディスク容量が消費されます。

これで、postgres15がインストールされ、起動しました。

ps aux

すると、プロセスが動いている事が分かります。

postgres    6687  0.0  0.7 213528 29412 ?        Ss   10:48   0:00 /usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf
postgres    6688  0.0  0.1 213688  5752 ?        Ss   10:48   0:00 postgres: 15/main: checkpointer
postgres    6689  0.0  0.1 213672  5752 ?        Ss   10:48   0:00 postgres: 15/main: background writer
postgres    6691  0.0  0.1 213672  5748 ?        Ss   10:48   0:00 postgres: 15/main: walwriter
postgres    6692  0.0  0.2 215104  8520 ?        Ss   10:48   0:00 postgres: 15/main: autovacuum launcher
postgres    6693  0.0  0.1 215136  6540 ?        Ss   10:48   0:00 postgres: 15/main: logical replication launcher

Postgres11から15にアップデートする時の注意

PostgreSQL 12からはユーザテーブルにoid列をつけることができなくなった

postgres11のデータベースでdumpしたバックアップファイルをpostgres11のデータベースへリストアする

まずはデータベースを作成

 createdb -U postgres ma_jp

バックアップファイルを復元 ファイル名 2023-02-20.ma_jp

$ pg_restore -U postgres -d ma_jp ./2023-02-20.ma_jp

警告に注意

pg_restore: 警告: WITH OIDSと定義されたテーブルのリストアは今後サポートされません

OIDって何?

オブジェクト識別子とは、PostgreSQLがDB内部に格納している様々なオブジェクト(テーブルやインデックス、関数、演算子、データ型定義などなど)を一意に識別するためのIDです。

オブジェクト識別子を活用する

※ユーザがPostgreSQLのオブジェクトのメタ情報などをDBから引き出したい場合に使う

WITH (
    OIDS = FALSE
)

Postgres11のテーブルSQLを確認すると、デフォルトでOIDS=FALSEと指定してある。これがそのままバックアップの際にdumpされるので、restoreすると、上記警告が出る模様。特にOIDを利用してなければ問題なさそう。

タイトルとURLをコピーしました