本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
できるだけサポート期間を長くしたい
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を利用してなければ問題なさそう。