3.3. PostgreSQL


3.3.1. 概要

OpenShift Online は、PostgreSQL の実行用のコンテナーイメージを提供します。このイメージでは、設定で指定されるユーザー名、パスワード、データベース名を基にデータベースサービスが提供されます。

3.3.2. バージョン

現時点で、OpenShift Online は PostgreSQL のバージョン 9.4 および 9.5 をサポートします。

3.3.3. イメージ

RHEL 7 イメージは、Red Hat レジストリーから入手できます。

$ docker pull registry.access.redhat.com/rhscl/postgresql-94-rhel7
$ docker pull registry.access.redhat.com/rhscl/postgresql-95-rhel7

これらのイメージは、postgresql イメージストリームで使用することができます。

3.3.4. 設定および用途

3.3.4.1. データベースの初期化

共有ボリュームを初めて使用する場合には、データベース、データベースの管理ユーザー、PostgreSQL root ユーザー (POSTGRESQL_ADMIN_PASSWORD 環境変数を指定した場合) が作成され、次に PostgreSQL デーモンが起動します。その後、PostgreSQL デーモンが起動します。別のコンテナーにボリュームを再アタッチする場合には、データベース、データベースユーザー、管理者ユーザーは作成されず、PostgreSQL デーモンが開始されます。

以下のコマンドは、新しいデータベースの Pod を作成し、さらにコンテナー内で PostgreSQL を実行します。

$ oc new-app \
    -e POSTGRESQL_USER=<username> \
    -e POSTGRESQL_PASSWORD=<password> \
    -e POSTGRESQL_DATABASE=<database_name> \
    postgresql:9.5

3.3.4.2. コンテナーでの PostgreSQL コマンドの実行

OpenShift Online は Software Collections (SCL) を使用して、PostgreSQL をインストールし、起動します。(デバッグ用に) 実行中のコンテナー内で PostgreSQL コマンドを実行する場合には bash を使用して呼び出す必要があります。

これには、まず、実行中の PostgreSQL Pod の名前を特定します。たとえば、現在のプロジェクトで Pod の一覧を表示できます。

$ oc get pods

次に、任意の Pod に対してリモートシェルセッションを開きます。

$ oc rsh <pod>

コンテナーに入ると、必要な SCL が自動的に有効になります。

Bash シェルから psql コマンドを実行し、PostgreSQL の対話セッションを開始して通常の PostgreSQL 操作が実行できるようになりました。たとえば、データベースユーザーとして認証するには、以下を実行します。

bash-4.2$ PGPASSWORD=$POSTGRESQL_PASSWORD psql -h postgresql $POSTGRESQL_DATABASE $POSTGRESQL_USER
psql (9.5.16)
Type "help" for help.

default=>

完了したら、\q と入力して PostgreSQL セッションを終了します。

3.3.4.3. 環境変数

PostgreSQL ユーザー名、パスワード、データベース名は、以下の環境変数で設定する必要があります。

表3.3 PostgreSQL 環境変数
変数名説明

POSTGRESQL_USER

作成予定の PostgreSQL アカウントのユーザー名。このユーザーには、対象のデータベースに対する完全な権限があります。

POSTGRESQL_PASSWORD

ユーザーアカウントのパスワード

POSTGRESQL_DATABASE

データベース名

POSTGRESQL_ADMIN_PASSWORD

postgres 管理ユーザーの任意パスワード。これが設定されていない場合には、postgres アカウントにリモートからログインができません。コンテナーからはいつでも、パスワードなしにローカル接続が可能です。

警告

ユーザー名、パスワード、データベース名を指定する必要があります。この 3 つすべてを指定しない場合には、Pod は起動に失敗し、OpenShift Online は Pod の再起動を継続的に試行します。

PostgreSQL 設定は、以下の環境変数で設定できます。

表3.4 PostgreSQL の他の設定
変数名説明デフォルト

POSTGRESQL_MAX_CONNECTIONS

許容範囲の最大クライアント接続数

100

POSTGRESQL_MAX_PREPARED_TRANSACTIONS

「準備」状態にすることのできる最大トランザクション数。準備状態のトランザクションを使用する場合には、値は POSTGRESQL_MAX_CONNECTIONS 以上に指定する必要があります。

0

POSTGRESQL_SHARED_BUFFERS

データのキャッシュ用に PostgreSQL 専用に割り当てられたメモリー量

32M

POSTGRESQL_EFFECTIVE_CACHE_SIZE

オペレーティングシステム別または PostgreSQL 自体で、ディスクキャッシュに利用可能な予想メモリー量

128M

3.3.4.4. ボリュームのマウントポイント

PostgreSQL イメージは、マウントしたボリュームで実行して、データベース用に永続ストレージを有効化できます。

  • /var/lib/pgsql/data: これは、PostgreSQL がデータベースファイルを保存するデータベースクラスターのディレクトリーです。

3.3.4.5. パスワードの変更

パスワードはイメージ設定の一部であるため、データベースユーザー (POSTGRESQL_USER) と postgres 管理者ユーザーのパスワードを変更する唯一のサポートされている方法として、環境変数 POSTGRESQL_PASSWORDPOSTGRESQL_ADMIN_PASSWORD をそれぞれ変更することができます。

現在のパスワードは、Pod またはデプロイメント設定を Web コンソールで表示するか、CLI で環境変数を表示して、確認できます。

$ oc set env pod <pod_name> --list

SQL ステートメントや、前述した環境変数以外の方法でデータベースのパスワードを変更すると、変数に保存されている値と、実際のパスワードが一致しなくなる可能性があります。データベースコンテナーが起動するたびに、パスワードは環境変数に保存されている値にリセットされます。

これらのパスワードを変更するには、oc set env コマンドを使用して、関連するデプロイメント設定の任意の環境変数 1 つまたは両方を更新します。たとえば、テンプレートからアプリケーションを作成する場合など、複数のデプロイメント設定がこれらの環境変数を使用する場合には、デプロイメント設定ごとに変数を更新し、パスワードがどこでも同期されるようにします。これは、すべて同じコマンドで実行できます。

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  POSTGRESQL_PASSWORD=<new_password> \
  POSTGRESQL_ADMIN_PASSWORD=<new_admin_password>
重要

アプリケーションによっては、アプリケーションの他の場所にあるパスワードの他の環境変数を更新して一致させる必要があるものもあります。たとえば、フロントエンド Pod のより一般的な DATABASE_USER 変数などは、データベースユーザーのパスワードと一致する必要がある場合があります。必要とされる環境変数すべてにおいて、パスワードがアプリケーションごとに一致しているようにしてください。 一致しない場合には、トリガーされた時点で、Pod の再デプロイメントが失敗する場合があります。

設定変更トリガーが設定されている場合には、環境変数を更新すると、データベースサーバーの再デプロイメントがトリガーされます。設定されていない場合には、新しいデプロイメントを手動で起動して、パスワードの変更を適用する必要があります。

新規パスワードが有効になっていることを確認するには、まず、実行中の PostgreSQL Pod に対してリモートシェルセッションを開きます。

$ oc rsh <pod>

Bash シェルから、データベースユーザーの新規パスワードを確認します。

bash-4.2$ PGPASSWORD=<new_password> psql -h postgresql $POSTGRESQL_DATABASE $POSTGRESQL_USER -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"

パスワードが正しく変更された場合には、以下のような表が表示されるはずです。

 current_database | current_user
------------------+--------------
 default          | django
(1 row)

Bash シェルから postgres 管理者ユーザーの新規パスワードを検証します。

bash-4.2$ PGPASSWORD=<new_admin_password> psql -h postgresql $POSTGRESQL_DATABASE postgres -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"

パスワードが正しく変更された場合には、以下のような表が表示されるはずです。

 current_database | current_user
------------------+--------------
 default          | postgres
(1 row)

3.3.5. テンプレートからのデータベースサービスの作成

OpenShift Online には テンプレートが含まれており、新規データベースサービスの作成を簡素化します。テンプレートには、必須の環境変数をすべて定義するパラメーターフィールドがあり (ユーザー、パスワード、データベース名など)、自動生成されたパスワード値など、事前定義済みのデフォルト値が設定されます。また、テンプレートは デプロイメント設定 および サービス の両方を定義します。

PostgreSQL テンプレートは、クラスターの初期設定時にクラスター管理者により、デフォルトの openshift プロジェクトに登録しておく必要があります。

以下のテンプレートを使用できます。

  • PostgreSQL-persistent は、データベースのデータ用に永続ボリュームストアを使用するので、データは Pod が再起動されても残ります。

この説明に従い、テンプレートをインスタンス化できます。

サービスをインスタンス化したら、データベースにアクセスする予定のある別のコンポーネントのデプロイメント設定に、ユーザー名、パスワード、データベース名の環境変数をコピーできます。このコンポーネントは、定義したサービスを使用してこのデータベースにアクセスできます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.