Upgrading the PEM backend Postgres database#
PEMコンポーネントとPEMバックエンドデータベースを更新する場合は、バックエンドデータベースを更新する前にサーバーとエージェントでPEMコンポーネントの更新を実行します。 PEMコンポーネントソフトウェアの更新の詳細については、 Upgrading a PEM installation on high-availability mode using HTTPD を参照してください。
注釈
PEM 8.0以降、PostgreSQLまたはEPASバージョン11以降は、バックエンドデータベースサーバーとしてのみサポートされています。その結果、バックエンドデータベースサーバーがバージョン11より前の場合、最初にバックエンドデータベースサーバーをアップグレードし、次にPEMコンポーネントをアップグレードする必要があります。
バックエンドデータベースサーバーをアップグレードした後、PEM Webインターフェイスでサーバーを作成中にこのエラーが発生した場合
Error - User does not have enough permission to add new server.
Please contact the administrator to grant pem_database_server_registration role
to the enterprisedb user.
ロールを更新し、適切な権限を付与することにより、エラーを解決します。
UPDATE pem.roles SET rolid = pr.oid FROM pg_roles pr WHERE pr.rolname = pem_ || component;
更新プロセスでは、 pg_upgradeユーティリティを使用して、バックエンドサーバーのあるバージョンからより新しいバージョンに移行します。 pg_upgradeは、サポートされているPostgresのバージョンと、同じプラットフォームでサポートされているPostgresの後続のリリース間の移行を有効にします。
ソースPEMサーバーが7.16バージョンより前の場合、 pg_upgradeを実行する前に次の機能を置き換える必要があります。
abstime、reltime、およびtintervalデータ型はPostgresバージョン12以降では非推奨であるため、これらのデータタイプをtimestamptzデータ型に置き換えるには、次のコマンドを使用します。
DO
$$
DECLARE
rec record;
cnt integer;
BEGIN
-- Check for the deprecated type in our user info probe
SELECT count(*) INTO cnt
FROM pem.probe_column
WHERE sql_data_type = ‘abstime’ AND internal_name = ‘valuntil’;
IF cnt = 0 THEN
RETURN;
END IF;
ALTER TABLE pemdata.user_info
ALTER COLUMN valuntil SET DATA TYPE timestamptz;
ALTER TABLE pemhistory.user_info
ALTER COLUMN valuntil SET DATA TYPE timestamptz;
-- Now update the pem.probe_column itself
UPDATE pem.probe_column
SET sql_data_type = ‘timestamptz’
WHERE sql_data_type = ‘abstime’ AND internal_name = ‘valuntil’;
END;
$$ LANGUAGE ‘plpgsql’;
アラートエラーを回避するには、このファンクションを置き換えます。
CREATE OR REPLACE FUNCTION pem.check_alert_params_array_size(
template_id pem.alert_template.id%type, params text[]
)
RETURNS bool AS $FUNC$
DECLARE
res bool := TRUE;
BEGIN
/*
- During restoring the pem database, it does not maintain the order while
- inserting data in the table, and uses the sort table based on the
- names.
- Hence - we need to check the foreign key constraint is present before
- validating these values.
*/
IF EXISTS(
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_name=alert_template_id_fkey AND
table_name=alert AND table_schema=pem
) THEN
/*
- Need to use the IS TRUE construct outside the main query, because
- otherwise if theres no template by that ID then the query would return
- 0 rows and the result of the function would be undefined and CHECK
- constraint would succeed.
- Probably this is being over-cautious, because pem.alert.template_id
- references pem.alert_template.id. But the SQL standard (probably) does
- not define the order in which the CHECK or the FOREIGN KEY constraints
- should be validated; in case CHECK is validated first, we want it to
- fail.
*/
EXECUTE $SQL$
SELECT (
SELECT pem.check_array_size_equal(t.param_names, $2)
FROM pem.alert_template AS t
WHERE id = $1
) IS TRUE
$SQL$ INTO res USING template_id, params;
END IF;
RETURN res;
END
$FUNC$ LANGUAGE plpgsql;
pg_upgradeは、同じタイプのサーバー間のデータの転送をサポートしています。たとえば、 pg_upgradeを使用して、PostgreSQL 10バックエンドデータベースからPostgreSQL 11バックエンドデータベースにデータを移動できますが、 EDB Postgres Advanced Server 11バックエンドデータベースには移動できません。別の種類のバックエンドデータベースに移行する場合PostgreSQLサーバーからEDB Postgres Advanced Serverなどに移行する場合、 Moving the PEM server を参照してください。
pg_upgradeの使用の詳細については、 pg_upgrade を参照してください。
更新されたインストーラーをダウンロードして起動します。 PostgreSQLおよびEDB Postgres Advanced Serverのインストーラーは、 EDB website から入手できます。
アップグレードするサーバーバージョンのインストーラーをダウンロードした後、PEMサーバーのホストでインストーラーを起動します。インストールウィザードの画面上の指示に従って、Postgresサーバーを構成およびインストールします。
オプションで、カスタム構築のPostgreSQLサーバーをPEMバックエンドデータベースのホストとして使用できます。ポート5432でリッスンするPostgreSQLバックエンドデータベースからアップグレードする場合、新しいサーバーは別のポートでリッスンするように構成する必要があります。
新しいサーバーでSSLユーティリティを構成します。新しいバックエンドデータベースは、現在のバックエンドデータベースが実行しているものと同じバージョンのsslutilsを実行している必要があります。 SSL Utilsパッケージは、 EDB website からダウンロードできます。
EDB Postgres Advanced Serverを新しいバックエンドデータベースとして使用する場合、sslutils拡張機能を手動で追加する必要はありません。 sslutilsの構成sslutilsはプラットフォーム固有です。
Linuxの場合
EDB Postgres Advanced Serverバックエンドデータベースでは、 sslutils拡張機能がデフォルトでインストールされます。
PostgreSQLをPEMバックエンドデータベースとして使用している場合、 PostgreSQLコミュニティリポジトリにアクセスできることを確認し、使用しますコマンド
yum install sslutils_<X>
<X> はサーバーバージョンです。
PostgreSQLのEDBワンクリックインストーラーをPEMバックエンドデータベースとして使用している場合、次のコマンドを使用します。
yum install gcc openssl-devel
pg_configプログラムを見つけられるようにPATHの値を設定します
export PATH=$PATH:/opt/postgres_inst_dir/<X>/bin/
sslutils フォルダーに移動し、次のように入力します。
make USE_PGXS=1
make USE_PGXS=1 install
psqlを使用してsslutils拡張機能を作成する
CREATE EXTENSION sslutils
Debian 10およびUbuntu 20では、セキュリティ上の理由から証明書を受け入れるための要件が強化されました。いずれかのマシンにPEMエージェントをインストールする場合は、sslutilsを1.3にアップグレードする必要があります。4096ビットRSAキーとsha256署名アルゴリズムのサポートが追加されました。 sslutilsを1.3にアップグレードしない場合、PEMエージェントはPEMバックエンドデータベースサーバーへの接続に失敗し、エラー「ca md too promote」がログに記録される場合があります。
**Windowsの場合*
元のバックエンドデータベースでsslutilsをコンパイルするために使用されたものと同じコンパイラーを使用して、新しいバックエンドデータベースでsslutilsをコンパイルする必要があります。 PostgreSQLワンクリックインストーラーEDBからまたはEDB Postgres Advanced Serverインストーラーを使用してインストールされたPostgresデータベースに移動する場合は、Visual Studioを使用してsslutilsをビルドしてください 。 PostgreSQL 10以降にアップグレードする場合は、Visual Studio 2010を使用してください。
WindowsでPostgresの特定のバージョンをビルドする方法の詳細については、そのバージョンのコアドキュメントを参照してください。コアドキュメントは PostgreSQL project website で入手できます。
プロセスの具体的な詳細はプラットフォームとコンパイラーによって異なりますが、各プラットフォームの基本的な手順は同じです。次の例は、32ビットWindowsシステムでのPostgreSQLのOpenSSLサポートのコンパイルを示しています。
OpenSSL拡張機能をコンパイルする前に、ご使用のWindowsバージョンのOpenSSLを見つけてインストールする必要があります。
OpenSSLインストーラーを呼び出す前に、前提条件の再配布可能vcredist_x86.exe
などをダウンロードしてインストールする必要がある場合があります。
OpenSSLのインストール後、 sslutils utility package をダウンロードして解凍します。
解凍した
sslutilsフォルダーをPostgresインストールディレクトリC:\ProgramFiles\PostgreSQL\<x.x>にコピーします。Visual Studioコマンドラインを開き、
sslutilsディレクトリに移動します。次のコマンドを使用してsslutilsをビルドします。
SET USE_PGXS=1
SET GETTEXTPATH=\ <path_to_gettext>
SET OPENSSLPATH=\ <path_to_openssl>
SET PGPATH=\ <path_to_pg_installation_dir>
SET ARCH=x86
msbuild sslutils.proj /p:Configuration=Release
そこで
path_to_gettextは、GETTEXTライブラリとヘッダーファイルの場所を指定します。path_to_opensslは、opensslライブラリとヘッダーファイルの場所を指定します。path_to_pg_installation_dirは、Postgresインストールの場所を指定します。
たとえば、次のコマンドセットは、PostgreSQL 11サーバーにOpenSSLサポートをビルドします。
SET USE_PGXS=1
SET OPENSSLPATH=C:\OpenSSL-Win32
SET GETTEXTPATH="C:\Program Files\PostgreSQL1"
SET PGPATH="C:\Program Files\PostgreSQL1"
SET ARCH=x86
msbuild sslutils.proj /p:Configuration=Release
ビルドが完了すると、
sslutilsディレクトリには次のファイルが含まれます。
sslutils--1.3.sql
sslutils--unpackaged--1.3.sql
sslutils--pemagent.sql.in
sslutils.dll
コンパイルしたsslutilsファイルをインストールの適切なディレクトリにコピーします。例
COPY sslutils*.sql "%PGPATH%\share\extension\"
COPY sslutils.dll "%PGPATH%\lib\"
COPY sslutils.control "%PGPATH%\share\extension\"
古いバックエンドデータベースと新しいバックエンドデータベースの両方のサービスを停止します。
RHEL 8.xで、コマンドラインを開き、スーパーユーザーのIDを引き継ぎます。次のコマンドを入力します。
systemctl <service_name> stop
<service_name> は、Postgresサービスの名前を指定します。
Windows、[ Services ]ダイアログボックスを使用してServicesを制御できます。サービスを停止するには 1. Control Panelで、 System and Security > Administrative Tools を選択します。 1. Services をダブルクリックします。 1. [ Services ]ダイアログボックスで、サービス名を選択し、[ Stop ]を選択します。
pg_upgradeユーティリティを使用して、古いバックエンドデータベースと新しいバックエンドデータベース間で既存のデータのインプレース転送を実行します。サーバーがmd5認証を強制するように構成されている場合、データベースのスーパーユーザーの接続プロパティおよびパスワードを指定するエントリーを
.pgpassファイルに追加する必要があります。または、pg_upgradeを呼び出す前に、pg_hba.confファイルを変更して信頼接続を許可する必要がある場合があります。.pgpassファイルへのエントリーの作成の詳細については、 PostgreSQL core documentation を参照してください。
アップグレードプロセス中に、pg_upgradeは一連のログファイルを書き込みます。クラスタ所有者は、書き込み権限があるディレクトリからpg_upgradeを呼び出す必要があります。アップグレードが正常に完了した場合、
pg_upgradeはアップグレードの完了時にログファイルを削除します。
pg_upgradeでアップグレードログファイルを削除したくない場合は、
pg_upgradeを呼び出すときに--retain キーワードを含みます。
pg_upgradeを呼び出すには、クラスター所有者のIDを引き継ぎ、クラスター所有者が書き込み権限があるディレクトリに移動し、コマンドを実行します。
<path_to_pg_upgrade> pg_upgrade
-d <old_data_dir_path>
-D <new_data_dir_path>
-b <old_bin_dir_path> -B <new_bin_dir_path>
-p <old_port> -P <new_port>
-u <user_name>
そこで
path_to_pg_upgradeは、 pg_upgradeユーティリティの場所を指定します。デフォルトでは、 pg_upgradeはPostgresディレクトリの下のbinディレクトリにインストールされます。 -old_data_dir_pathは、古いバックエンドデータベースのデータディレクトリへの完全なパスを指定します。 -new_data_dir_pathは、新しいバックエンドデータベースのデータディレクトリへの完全なパスを指定します。 -old_bin_dir_pathは、古いバックエンドデータベースのbinディレクトリへの完全なパスを指定します。 -new_bin_dir_pathは、古いバックエンドデータベースのbinディレクトリへの完全なパスを指定します。 -old_portは、古いサーバーがリッスンしているポートを指定します。 -new_portは、新しいサーバーがリッスンするポートを指定します。 -user_nameは、クラスター所有者の名前を指定します。
たとえば、次のコマンドは、 WindowsシステムでPostgreSQL 9.6からPostgreSQL 11にPEMデータベースを移行するようにpg_upgradeに指示しますバックエンドデータベースがデフォルトの場所にインストールされている場合。
C:\>"C:\Program Files\PostgreSQL1\bin\pg_upgrade.exe"
-d "C:\Program Files\PostgreSQL0\data"
-D "C:\Program Files\PostgreSQL1\data"
-b "C:\Program Files\PostgreSQL0\bin"
-B "C:\Program Files\PostgreSQL1\bin"
-p 5432 -P 5433
-U postgres
pg_upgradeは、呼び出されると、データを新しいバックエンドデータベースに移動する前に一貫性チェックを実行します。アップグレードが完了すると、 pg_upgradeはアップグレードが完了したことを通知します。
pg_upgradeオプションの使用またはアップグレードプロセスのトラブルシューティングの詳細については、 pg_upgrade を参照してください。
次の証明書ファイルを、古いバックエンドデータベースの
dataディレクトリから新しいバックエンドデータベースのdataディレクトリにコピーします。
ca_certificate.crt
ca_key.key
root.crt
root.crl
server.key
server.crt
ターゲットサーバーに配置されたら、ファイルに次のプラットフォーム固有の権限があることを確認します。
Linuxでの権限と所有権
File name |
Owner |
Permissions |
|---|---|---|
ca_certificate.crt |
postgres |
-rw------- |
ca_key.key |
postgres |
-rw------- |
root.crt |
postgres |
-rw------- |
root.crl |
postgres |
-rw------- |
server.key |
postgres |
-rw------- |
server.crt |
postgres |
-rw-r--r-- |
Linuxでは、証明書ファイルはpostgresが所有する必要があります。コマンドラインで次のコマンドを使用して、ファイルの所有権を変更できます。
chown postgres <file_name>
file_name は、証明書ファイルの名前を指定します。
server.crt
ファイルの所有者のみが変更できますが、すべてのユーザーが読み取ることができます。次のコマンドを使用して、server.crt
ファイルのファイル許可を設定できます。
chmod 644 server.crt
他の証明書ファイルの所有者のみがファイルを変更または読み取ることができます。次のコマンドを使用して、ファイルのアクセス許可を設定できます。
chmod 600 <file_name>
file_name は、ファイルの名前を指定します。
Windowsでの権限と所有権
Windowsでは、ターゲットホストでPEMサーバーとバックエンドデータベースのインストールを実行したサービスアカウントは、ソースホストから移動した証明書ファイルを所有している必要があります。インストーラーのコンテキストメニューから Run as Administrator を使用してPEMサーバーとPostgresインストーラーを呼び出した場合、証明書ファイルの所有者はAdministratorsです。
Windowsでファイルのアクセス許可を確認および変更するには、ファイル名を右クリックし、 プロパティ を選択します。
[ セキュリティ ]タブで、グループまたはユーザー名を選択して、割り当てられたアクセス許可を表示します。 Edit または Advanced を選択して、選択したユーザーに関連付けられている権限を変更できるダイアログボックスを開きます。
postgresql.confファイルには、サーバーの動作を指定するパラメーター設定が含まれています。古いサーバーのpostgresql.confファイルで指定された構成と一致するように、新しいサーバーのpostgresql.confファイルを変更します。
デフォルトでは、 postgresql.conf ファイルは次の場所にあります。
LinuxでPostgresバージョン10より前の場合、
/opt/PostgreSQL/<X>/dataLinuxでグラフィカルインストーラーでインストールしたPostgresバージョン10以降の場合、
/opt/PostgreSQL/<X>/dataLinuxでRPMでインストールした場合のPostgresバージョン10以降の場合、
/usr/pgsql/<X>/dataWindows上のPostgresバージョンの場合、
C:\Program Files\PostgreSQL\<X>\data
<X> は、システム上のPostgresのバージョンです。
選択したエディターを使用して、新しいサーバーのpostgresql.conf
ファイルを更新します。次のパラメーターを変更します。
元のバックエンドデータベースによって監視されるポートでリッスンする
portパラメーター通常は5432に設定します。onに設定するsslパラメーター
また、次のパラメーターが有効になっていることを確認する必要があります。パラメーターがコメントアウトされている場合は、各postgresql.conf
ファイルエントリーの前にあるポンド記号を削除します。
ssl_cert_file = 'server.crt' # (change requires restart)ssl_key_file = 'server.key' # (change requires restart)ssl_ca_file = 'root.crt' # (change requires restart)ssl_crl_file = 'root.crl'
インストールには、新しいバックエンドデータベースが古いバックエンドデータベースのように動作するように変更が必要な他のパラメーター設定がある場合があります。
postgresql.conf
ファイルを注意深く確認して、新しいサーバーの構成が古いサーバーの構成と一致することを確認します。
pg_hba.confファイルには、サーバーがホストベースの認証を強制する方法を指定するパラメーター設定が含まれています。 PEMサーバーをインストールすると、インストーラーはpg_hba.confファイルを変更し、ファイルの先頭にエントリを追加します。
Adding entries for PEM Agens and admins to connect to PEM server#
hostssl pem +pem_user 192.168.2.0/24 md5
hostssl pem +pem_agent 192.168.2.0/24 cert
Adding entries (localhost) for PEM Agens and admins to connect to PEM server#
hostssl pem +pem_user 127.0.0.1/32 md5
hostssl postgres +pem_user 127.0.0.1/32 md5
hostssl pem +pem_user 127.0.0.1/32 md5
hostssl pem +pem_agent 127.0.0.1/32 cert
デフォルトでは、 pg_hba.conf ファイルは次の場所にあります。
Linuxで10より前のPostgresバージョンの場合、
/opt/PostgreSQL/<X>/dataLinuxでグラフィカルインストーラーでインストールされたPostgresバージョン10以降の場合、
/Opt/PostgreSQL/<X>/dataPostgresバージョン10以降の場合LinuxでのRPM、
/var/lib/pgsql/<X>/dataLinuxでRPMでインストールされたAdvanced Serverバージョン10以降の場合、
/var/lib/edb/as<X>/dataでWindowsのPostgresバージョン、
C:\Program Files\PostgreSQL\<X>\data
<X> は、システム上のPostgresのバージョンです。
選択したエディターを使用して、古いサーバーのpg_hba.conf
ファイルから新しいサーバーのpg_hba.conf
ファイルにエントリをコピーします。
新しいバックエンドデータベースのサービスを再起動します。
RHEL 8.xでは、スーパーユーザーとしてコマンドラインで次のように入力します。
systemctl stop <service_name>
service_name は、バックエンドデータベースサーバーの名前です。
Windowsを使用している場合は、 Services ダイアログボックスを使用してサービスを制御できます。1. Control Panelで、 System and Security > Administrative Tools を選択します。 1. Services アイコンをダブルクリックします。 1. [ Services ]ダイアログボックスで、サービス名を選択し、サービスを開始します。