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 を参照してください。

  1. 更新されたインストーラーをダウンロードして起動します。 PostgreSQLおよびEDB Postgres Advanced Serverのインストーラーは、 EDB website から入手できます。

アップグレードするサーバーバージョンのインストーラーをダウンロードした後、PEMサーバーのホストでインストーラーを起動します。インストールウィザードの画面上の指示に従って、Postgresサーバーを構成およびインストールします。

オプションで、カスタム構築のPostgreSQLサーバーをPEMバックエンドデータベースのホストとして使用できます。ポート5432でリッスンするPostgreSQLバックエンドデータベースからアップグレードする場合、新しいサーバーは別のポートでリッスンするように構成する必要があります。

  1. 新しいサーバーで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\"
  1. 古いバックエンドデータベースと新しいバックエンドデータベースの両方のサービスを停止します。

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 ]を選択します。

  1. 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 を参照してください。

  1. 次の証明書ファイルを、古いバックエンドデータベースの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 を選択して、選択したユーザーに関連付けられている権限を変更できるダイアログボックスを開きます。

  1. postgresql.conf ファイルには、サーバーの動作を指定するパラメーター設定が含まれています。古いサーバーのpostgresql.conf ファイルで指定された構成と一致するように、新しいサーバーのpostgresql.conf ファイルを変更します。

デフォルトでは、 postgresql.conf ファイルは次の場所にあります。

  • LinuxでPostgresバージョン10より前の場合、/opt/PostgreSQL/<X>/data

  • LinuxでグラフィカルインストーラーでインストールしたPostgresバージョン10以降の場合、/opt/PostgreSQL/<X>/data

  • LinuxでRPMでインストールした場合のPostgresバージョン10以降の場合、/usr/pgsql/<X>/data

  • Windows上の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 ファイルを注意深く確認して、新しいサーバーの構成が古いサーバーの構成と一致することを確認します。

  1. 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>/data

  • LinuxでグラフィカルインストーラーでインストールされたPostgresバージョン10以降の場合、/Opt/PostgreSQL/<X>/data

  • Postgresバージョン10以降の場合LinuxでのRPM、/var/lib/pgsql/<X>/data

  • Linuxで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 ファイルにエントリをコピーします。

  1. 新しいバックエンドデータベースのサービスを再起動します。

RHEL 8.xでは、スーパーユーザーとしてコマンドラインで次のように入力します。

systemctl stop <service_name>

service_name は、バックエンドデータベースサーバーの名前です。

Windowsを使用している場合は、 Services ダイアログボックスを使用してサービスを制御できます。1. Control Panelで、 System and Security > Administrative Tools を選択します。 1. Services アイコンをダブルクリックします。 1. [ Services ]ダイアログボックスで、サービス名を選択し、サービスを開始します。