Amazon RDS 上の PostgreSQL - Amazon Relational Database Service

Amazon RDS 上の PostgreSQL

Amazon RDS では、PostgreSQL の複数のバージョンを実行する DB インスタンスがサポートされています。利用可能なバージョンのリストについては、「利用可能な PostgreSQL データベースのバージョン」を参照してください。

注記

2022 年 4 月 26 日に、PostgreSQL 9.6 の廃止が予定されています。詳細については、「PostgreSQL バージョン 9.6 の廃止」を参照してください。

DB インスタンス、DB スナップショット、ポイントインタイムの復元とバックアップを作成できます。PostgreSQL を実行する DB インスタンスでは、マルチ AZ 配置、リードレプリカ、プロビジョンド IOPS がサポートされています。これらのインスタンスは、仮想プライベートクラウド (VPC) 内で作成できます。PostgreSQL を実行する DB インスタンスには Secure Socket Layer (SSL) でも接続できます。

DB インスタンスを作成する前に、必ず「Amazon RDS のセットアップ」の手順を完了してください。

スタンダード的な SQL クライアントアプリケーションを使用して、クライアントコンピュータからインスタンスに対してコマンドを実行できます。例えば、pgAdmin (PostgreSQL 用に普及しているオープンソースの管理および開発ツール) や psql (PostgreSQL インストールに含まれるコマンドラインユーティリティ) などのアプリケーションを使用できます。マネージド型サービスエクスペリエンスを提供するために、Amazon RDS では DB インスタンスへのホストアクセスが許可されません。また、アドバンストの特権を必要とする特定のシステムの手順やテーブルへのアクセスも制限されいます。Amazon RDS は、任意のスタンダード SQL クライアントアプリケーションによる、DB インスタンス上のデータベースへのアクセスがサポートされています。Amazon RDS では、Telnet またはセキュアシェル (SSH) を使用しての、DB インスタンスへのダイレクトホストアクセスは許可されません。

Amazon RDS for PostgreSQL は、多くの業界スタンダードに準拠しています。例えば、Amazon RDS for PostgreSQL データベースを使用して、HIPAA 準拠アプリケーションをビルドしたり、医療関連の情報を保存したりできます。これには、AWS との間で締結された事業提携契約 (BAA) に基づく保護されるべき医療情報 (PHI) の保存が含まれます。また、Amazon RDS for PostgreSQL は、Federal Risk and Authorization Management Program (FedRAMP) のセキュリティ要件を満たしています。Amazon RDS for PostgreSQL は、AWS GovCloud (US) リージョンにおいて、FedRAMP Joint Authorization Board (JAB) の Provisional Authority to Operate (P-ATO) として、FedRAMP High ベースラインの認証を受けています。サポートされるコンプライアンススタンダードの詳細については、AWS クラウドコンプライアンスを参照してください。

PostgreSQL データを DB インスタンスにインポートするには、「Amazon RDS の PostgreSQL にデータをインポートする」セクションの説明に従ってください。

Amazon RDS for PostgreSQL の一般的な管理タスク

以下に示しているのは、Amazon RDS for PostgreSQL DB インスタンスで実行する一般的な管理タスクと、各タスクの関連ドキュメントへのリンクです。

タスク領域 関連資料

Amazon RDS を初めてセットアップして使う

DB インスタンスを作成する前に、いくつかの前提条件を満たしていることを確認してください。例えば、DB インスタンスが作成されると、アクセスを禁止するファイアウォールがデフォルトで設定されます。したがって、DB インスタンスにアクセスするために、IP アドレスとネットワーク設定が正しく指定されたセキュリティグループを作成する必要があります。

Amazon RDS のセットアップ

Amazon RDS DB インスタンスを理解する

本稼働用に DB インスタンスを作成する場合、インスタンスクラス、ストレージタイプ、およびプロビジョンド IOPS が Amazon RDS でどのように機能するか理解する必要があります。

DB インスタンスクラス

Amazon RDS ストレージタイプ

プロビジョンド IOPS SSD ストレージ

利用可能な PostgreSQL バージョンの検索

Amazon RDS は、PostgreSQL の複数のバージョンをサポートします。

利用可能な PostgreSQL データベースのバージョン

高可用性およびフェイルオーバーサポートのセットアップ

本稼働 DB インスタンスは、マルチ AZ 配置を使用する必要があります。マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。

高可用性を重視したマルチ AZ 配置

Amazon Virtual Private Cloud (VPC) ネットワークについて

AWS アカウントにデフォルト VPC がある場合、DB インスタンスがデフォルト VPC 内に自動的に作成されます。場合によっては、アカウントにデフォルトの VPC がないため、VPC に DB インスタンスが必要な場合もあります。このような場合、DB インスタンスを作成する前に VPC とサブネットグループを作成します。

EC2-VPC または EC2-Classic のどちらのプラットフォームを使用しているかを確認する

VPC 内の DB インスタンスの使用

Amazon RDS PostgreSQL にデータをインポートする

Amazon RDS の PostgreSQL DB インスタンスにデータをインポートするには、さまざまなツールを使用できます。

Amazon RDS の PostgreSQL にデータをインポートする

読み取り専用リードレプリカ (プライマリおよびスタンバイ) のセットアップ

RDS for PostgreSQL では、同じ AWS リージョン、および、プライマリインスタンスとは別の AWS リージョンの両方で、リードレプリカがサポートされます。

リードレプリカの使用

Amazon RDS での PostgreSQL リードレプリカの使用

別の AWS リージョンでのリードレプリカの作成

セキュリティグループの理解

デフォルトでは、DB インスタンスが作成されると、アクセスを禁止するファイアウォールが設定されます。そのファイアウォールを介してアクセスできるようにするには、DB インスタンスをホストする VPC に関連付けられているセキュリティグループのインバウンドルールを編集します。

通常、DB インスタンスが EC2-Classic プラットフォーム上にある場合は、DB セキュリティグループを作成する必要があります。DB インスタンスが EC2-VPC プラットフォーム上にある場合は、VPC セキュリティグループを作成する必要があります。

EC2-VPC または EC2-Classic のどちらのプラットフォームを使用しているかを確認する

セキュリティグループによるアクセス制御

パラメータグループおよび機能のセットアップ

DB インスタンスのデフォルトパラメータを変更するには、カスタム DB パラメータグループを作成し、設定をそのパラメータグループに変更します。DB インスタンスを作成する前にこの操作を行うと、インスタンスの作成時にカスタム DB パラメータグループを選択できます。

パラメータグループを使用する

PostgreSQL DB インスタンスへの接続

セキュリティグループを作成し、それを DB インスタンスに関連付けると、psqlpgAdmin などの標準的な SQL クライアントアプリケーションを使用して DB インスタンスに接続できます。

PostgreSQL データベースエンジンを実行する DB インスタンスへの接続

PostgreSQL DB インスタンスで SSL を使用する

DB インスタンスのバックアップと復元

バックアップが自動的に作成されるように DB インスタンスを設定したり、スナップショットを手動で作成したりできます。そうすることで後で、そのバックアップまたはスナップショットからインスタンスを復元できます。

Amazon RDS DB インスタンスのバックアップと復元

DB インスタンスのアクティビティとパフォーマンスのモニタリング

CloudWatch Amazon RDS メトリクス、イベント、および拡張モニタリングを使用することで、PostgreSQL DB インスタンスをモニタリングできます。

Amazon RDS コンソールでのメトリクスの表示

Amazon RDS イベントの表示

PostgreSQL データベースバージョンのアップグレード

PostgreSQL DB インスタンスのメジャーバージョンとマイナーバージョンの両方をアップグレードできます。

Amazon RDS の PostgreSQL DB エンジンのアップグレード

PostgreSQL のメジャーバージョンアップグレードの選択

ログファイルの操作

PostgreSQL DB インスタンスのログファイルにアクセスできます。

PostgreSQL データベースのログファイル

PostgreSQL DB インスタンスに関するベストプラクティスの理解

Amazon RDS での PostgreSQL の使用に関するいくつかのベストプラクティスが見つかります。

PostgreSQL を使用するためのベストプラクティス

RDS for PostgreSQL の重要な機能の理解と使用に役立つ、このガイドの他のセクションのリストは次のとおりです。

データベースプレビュー環境の使用

Amazon RDS で DB インスタンスを作成する場合、それが基づく PostgreSQL バージョンは Amazon によってテスト済みであり、完全にサポートされています。PostgreSQL コミュニティは、新しいバージョンと新しいエクステンションを絶えずリリースしています。新しい PostgreSQL バージョンおよびエクステンションは、これらが完全にサポートされる前に試すことができます。この場合、データベースプレビュー環境で新しい DB インスタンスを作成できます。

データベースプレビュー環境の DB インスタンスは、本稼働環境の DB インスタンスに似ています。ただし、以下の重要な点に注意してください。

  • すべての DB インスタンスは、作成から 60 日後にバックアップおよびスナップショットとともに削除されます。

  • DB インスタンスは、Amazon VPC サービスに基づく仮想プライベートクラウド (VPC) でのみ作成できます。

  • 作成できるのは、M6g、M5、T3、R6g、および R5 インスタンスタイプのみです。RDS インスタンスクラスの詳細については、「 DB インスタンスクラス」を参照してください。

  • 汎用 SSD およびプロビジョンド IOPS SSD ストレージのみを使用できます。

  • DB インスタンスに関して AWS サポートからヘルプを受けることはできません。代わりに、AWS マネージド Q&A コミュニティ、AWS re:Post に質問を投稿できます。

  • DB インスタンスのスナップショットを本稼働環境にコピーすることはできません。

  • シングル AZ 配置とマルチ AZ 配置の両方を使用できます。

  • スタンダードの PostgreSQL ダンプおよびロード機能を使用して、データベースをデータベースプレビュー環境にエクスポートしたり、データベースプレビュー環境にインポートしたりできます。

プレビュー環境でサポートされない機能

以下の機能は、プレビュー環境で使用できません。

  • クロスリージョンスナップショットのコピー

  • クロスリージョンリードレプリカ

プレビュー環境での新しい DB インスタンスの作成

プレビュー環境で DB インスタンスを作成するには、次の手順を使用します。

プレビュー環境で新しい DB インスタンスを作成するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[ダッシュボード] を選択します。

  3. [Switch to database preview environment (データベースプレビュー環境に切り替える)] を選択します。

    
                            プレビュー環境を選択するためのダイアログボックス

    また、データベースプレビュー環境に直接移動することもできます。

    注記

    API または CLI を使用してデータベースプレビュー環境でインスタンスを作成する場合、エンドポイントは rds-preview.us-east-2.amazonaws.com です。

  4. [Console] (コンソール)」の手順に従って続行します。

PostgreSQL DB インスタンスの制限

次のリストに示しているのは、RDS for PostgreSQL についての制限です。

  • 最大 40 個の PostgreSQL DB インスタンスを作成できます。

  • ストレージの制限については、Amazon RDS DB インスタンスストレージ を参照してください。

  • Amazon RDS では、システムメンテナンス用に最大 3 接続が予約されます。ユーザー接続パラメータの値を指定する場合は、使用予定の接続数に 3 を加えます。

利用可能な PostgreSQL データベースのバージョン

Amazon RDS では、PostgreSQL の複数のエディションを実行する DB インスタンスがサポートされています。新しい DB インスタンスを作成する際、現在利用可能な PostgreSQL バージョンであればどれでも指定できます。メジャーバージョン (PostgreSQL 10 など) と、指定したメジャーバージョンで利用可能な任意のマイナーバージョンを指定できます。バージョンを指定しない場合、Amazon RDS では、利用可能なバージョン (通常は最新バージョン) がデフォルトで設定されます。マイナーバージョンではなく、メジャーバージョンを指定した場合は、Amazon RDS では、お客様が指定したメジャーバージョンの最新リリースにデフォルトで設定されます。

利用可能なバージョンのリストと、新しく作成された DB インスタンスのデフォルト設定を表示するには、AWS CLI の describe-db-engine-versions コマンドを使用します。例えば、デフォルトの PostgreSQL エンジンのバージョンを表示するには、次のコマンドを使用します。

aws rds describe-db-engine-versions --default-only --engine postgres

Amazon RDS でサポートされている PostgreSQL バージョンの詳細については、Amazon RDS for PostgreSQL リリースノートを参照してください。

PostgreSQL バージョン 9.6 の廃止

2022 年 3 月 31 日、Amazon RDS では、PostgreSQL 9.6 の非推奨化を次のスケジュールで予定しています。これにより、以前に発表された日付の 2022 年 1 月 18 日が、2022 年 4 月 26 日まで延長されます。できるだけ早く、すべての PostgreSQL 9.6 DB インスタンスを、PostgreSQL 12 以降にアップグレードする必要があります。間のメジャーバージョンにアップグレードするのではなく、まずマイナーバージョンの 9.6.20 以上にアップグレードしてから、PostgreSQL 12 に直接アップグレードすることをお勧めします。詳細については、「Amazon RDS の PostgreSQL DB エンジンのアップグレード」を参照してください。

アクションまたは推奨事項 日付

PostgreSQL コミュニティは PostgreSQL 9.6 のサポートを終了し、このバージョンのバグ修正やセキュリティパッチを提供しなくなります。

2021 年 11 月 11 日

できるだけ早く、RDS for PostgreSQL 9.6 DB インスタンスを PostgreSQL 12 以降にアップグレードしてください。引き続き PostgreSQL 9.6 のスナップショットの復元や、バージョン 9.6 のリードレプリカの作成はできますが、この廃止スケジュールについて、その他の重要な日付と、その影響には注意していてください。

現在 — 2022 年 3 月 31 日

この日付を過ぎると、AWS Management Console または AWS CLI のいずれを使用しても、PostgreSQL メジャーバージョン 9.6 で新しい Amazon RDS インスタンスを作成することはできません。

2022 年 3 月 31 日

Amazon RDS は、PostgreSQL 9.6 インスタンスを、バージョン 12 に自動的にアップグレードします。PostgreSQL 9.6 のデータベーススナップショットを復元すると、Amazon RDS は復元されたデータベースを、PostgreSQL 12 に自動的にアップグレードします。

2022 年 4 月 26 日

Amazon RDS for PostgreSQL の非推奨バージョン

RDS for PostgreSQL 9.5 は、2021 年 3 月に廃止されました。DS for PostgreSQL 9.5 の非推奨化の詳細については、「Upgrading from Amazon RDS for PostgreSQL version 9.5」( バージョン 9.5 からのアップグレード) を参照してください。

RDS for PostgreSQL の非推奨ポリシーの詳細については、「Amazon RDS のよくある質問」を参照してください。PostgreSQL のバージョンの詳細については、PostgreSQL のドキュメントの「Versioning Policy」(バージョニングポリシー) を参照してください。

サポートされている PostgreSQL 拡張機能バージョン

RDS for PostgreSQL は、多くの PostgreSQL エクステンションをサポートしています。PostgreSQL コミュニティでは、これらをモジュールと呼ぶことがあります。エクステンションは、PostgreSQL エンジンが提供する機能を拡張します。Amazon RDS がサポートするエクステンションのリストは、該当する PostgreSQL バージョンのデフォルトの DB パラメータグループで確認できます。また、次の例に示すように、psqlrds.extensions パラメータを表示することで、最新のエクステンションのリストを確認することもできます。

SHOW rds.extensions;
注記

マイナーバージョンのリリースで追加されたパラメータは、rds.extensionspsql パラメータを使用する際に正しく表示されない場合があります。

Amazon RDS でサポートされている PostgreSQL 拡張機能の詳細については、Amazon RDS for PostgreSQL リリースノートの「Amazon RDS でサポートされる PostgreSQL の拡張機能」を参照してください。

PostgreSQL エクステンションのインストールを制限する

PostgreSQL DB インスタンスにインストールできるエクステンションを制限できます。そのためには、rds.allowed_extensions パラメータをカンマで区切った拡張子名の文字列に設定します。その後、PostgreSQL DB インスタンスにインストールできるのは、これらのエクステンションだけです。

rds.allowed_extensions パラメータのデフォルトの文字列は '*' です。これは、そのエンジンのバージョンで使用できるエクステンションは何でもインストールできることを意味します。動的パラメータであるため、rds.allowed_extensions パラメータを変更しても、データベースを再起動する必要はありません。

rds.allowed_extensions パラメータを使用するには、PostgreSQL DB インスタンスエンジンは次のバージョンのいずれかである必要があります。

  • PostgreSQL 14.1 またはそれ以降のマイナーバージョン

  • PostgreSQL 13.2 またはそれ以降のマイナーバージョン

  • PostgreSQL 12.6 またはそれ以降のマイナーバージョン

どのエクステンションのインストールが許可されているかを確認するには、次の psql コマンドを使用します。

postgres=> SHOW rds.allowed_extensions; rds.allowed_extensions ------------------------ *

エクステンションが rds.allowed_extensions パラメータのリストから除外される前にインストールされていた場合でも、エクステンションは正常に使用でき、ALTER EXTENSIONDROP EXTENSION などのコマンドは引き続き機能します。ただし、エクステンションが制限されると、制限されたエクステンションの CREATE EXTENSION コマンドは失敗します。

CREATE EXTENSION CASCADE とのエクステンションの依存関係のインストールも制限されています。エクステンションとその依存関係は、rds.allowed_extensions で指定する必要があります。拡張依存のインストールが失敗すると、CREATE EXTENSION CASCADE 文全体が失敗します。

rds.allowed_extensions パラメータにエクステンションが含まれていない場合、インストールしようとすると、次のようなエラーが表示されます。

ERROR: permission denied to create extension "extension-name" HINT: This extension is not specified in "rds.allowed_extensions".

PostgreSQL 信頼できるエクステンション

ほとんどの PostgreSQL エクステンションをインストールするには、rds_superuser 権限が必要です。PostgreSQL 13 では、信頼できるエクステンションが導入されました。これにより、一般ユーザーに rds_superuser 特権を付与する必要が少なくなります。この機能を使用すると、ユーザーは、CREATE ロールを要求する代わりに、現在のデータベースに対する rds_superuser 権限を持っている場合、多くのエクステンションをインストールできます。詳細については、PostgreSQL ドキュメントの SQL CREATE EXTENSION コマンドを参照してください。

以下に、現在のデータベースに対する CREATE 権限を持ち、rds_superuser ロールを必要としないユーザーがインストールできるエクステンションを示します。

Amazon RDS for PostgreSQL でサポートされている PostgreSQL の機能を使用する

Amazon RDS for PostgreSQL では、PostgreSQL の最も一般的な機能の多くと共通点の多い機能性がサポートされています。例えば、PostgreSQL には、データベースの定期的なメンテナンスを実行する自動バキューム機能があります。この機能は、デフォルトでアクティブになっています。この機能をオフにすることはできますが、オンにしておくことを強くお勧めします。この機能を理解し、それを正しく動作させるために何ができるかを把握することは、どの DBA にとっても基本的なタスクです。自動バキュームの詳細については、「Amazon RDS for PostgreSQL での PostgreSQL 自動バキュームの使用」を参照してください。その他の一般的な DBA タスクの詳細については、「Amazon RDS for PostgreSQL の一般的な DBA タスク」を参照してください。

RDS for PostgreSQL では、DB インスタンスに重要な機能性を追加する拡張機能もサポートされています。例えば、PostGIS 拡張機能を使用して空間データを操作したり、pg_cron 拡張機能を使用してインスタンス内からメンテナンスをスケジュールしたりできます。PostgreSQL 拡張機能の詳細については、「Amazon RDS for PostgreSQL で PostgreSQL 拡張機能を使用する」を参照してください。

外部データラッパーは、RDS for PostgreSQL DB インスタンスが他の商用データベースまたはデータ型と連携できるように設計された特定のタイプの拡張機能です。RDS for PostgreSQL でサポートされている外部データラッパーの詳細については、「Amazon RDS for PostgreSQL でサポートされている外部データラッパーを使用する」を参照してください。

RDS for PostgreSQL でサポートされている PostgreSQL の機能については、次で説明します。

RDS for PostgreSQL でのカスタムデータ型および列挙型

PostgreSQL では、カスタムデータ型の作成と列挙型の操作がサポートされています。列挙型とその他のデータ型の作成および操作の詳細については、「PostgreSQL のドキュメント」の「列挙型」を参照してください。

次は、列挙型として型を作成し、テーブルに値を挿入する例です。

CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple'); CREATE TYPE CREATE TABLE t1 (colors rainbow); CREATE TABLE INSERT INTO t1 VALUES ('red'), ( 'orange'); INSERT 0 2 SELECT * from t1; colors -------- red orange (2 rows) postgres=> ALTER TYPE rainbow RENAME VALUE 'red' TO 'crimson'; ALTER TYPE postgres=> SELECT * from t1; colors --------- crimson orange (2 rows)

RDS for PostgreSQL のイベントトリガー

現在すべての PostgreSQL バージョンでイベントトリガーをサポートしているため、RDS for PostgreSQL のすべての利用可能なバージョンも、同様にイベントトリガーをサポートしています。メインユーザーアカウント (デフォルトでは postgres) を使用して、イベントトリガーを作成、変更、名前変更、および削除できます。イベントトリガーは DB インスタンスレベルであるため、インスタンスのすべてのデータベースに適用できます。

例えば、次のコードは、各データ定義言語 (DDL) コマンドの最後に現在のユーザーを表示するイベントトリガーを作成します。

CREATE OR REPLACE FUNCTION raise_notice_func() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'In trigger function: %', current_user; END; $$; CREATE EVENT TRIGGER event_trigger_1 ON ddl_command_end EXECUTE PROCEDURE raise_notice_func();

PostgreSQL イベントトリガーの詳細については、PostgreSQL ドキュメントの「Event Triggers」を参照してください。

Amazon RDS で PostgreSQL イベントトリガーを使用する場合、いくつかの制限があります。これには次のものが含まれます。

  • リードレプリカでイベントトリガーを作成することはできません。ただし、イベントトリガーはリードレプリカソースで作成できます。作成したイベントトリガーは、リードレプリカにコピーされます。リードレプリカのイベントトリガーは、ソースから変更がプッシュされたときにリードレプリカでは起動しません。ただし、リードレプリカが昇格されると、データベースオペレーションが発生したときに既存のイベントトリガーが起動します。

  • イベントトリガーを使用する PostgreSQL DB インスタンスへのメジャーバージョンアップグレードを実行する場合は、インスタンスのアップグレード前に必ずイベントトリガーを削除してください。

RDS for PostgreSQL の ヒュージページ

Huge pages はメモリ管理機能です。DB インスタンスが、共有バッファで使用されるような、大きく連続したメモリチャンクで動作しているときのオーバーヘッドを軽減します。この PostgreSQL の機能は、現在の PostgreSQL バージョンで利用可能なすべての RDS でサポートされています。mmapまたはSYSV共有メモリへの呼び出しを使用して、アプリケーションに巨大なページを割り当てます。RDS for PostgreSQL では、4 KB と 2 MB の両方のページサイズがサポートされています。

huge_pages パラメータの値を変更することで、Huge pages のオンとオフを切り替えることができます。この機能は、micro、small、medium 以外のすべての DB インスタンスクラスで、デフォルトでオンになっています。

注記

ヒュージページは、db.m1、db.m2、および db.m3 DB インスタンスクラスではサポートされていません。

RDS for PostgreSQL では、利用可能な共有メモリに基づき、ヒュージページを使用します。共有メモリの制約のために DB インスタンスが巨大なページを使用できない場合、Amazon RDS は DB インスタンスの起動を防ぎます。この場合、Amazon RDS により、DB インスタンスのステータスが互換性のないパラメータ状態に設定されます。これが起こると、huge_pagesパラメータをoffに設定して Amazon RDSで DB インスタンスの起動を許可します。

shared_buffers パラメータは huge ページを使用するために必要な共有メモリプールの設定に重要です。shared_buffersパラメータのデフォルト値は、データベースパラメータマクロを使用します。このマクロは、DB インスタンスのメモリで使用できる 8 KBのページの合計のパーセント割合を設定します。巨大なページを使用する場合、それらのページは巨大なページと一緒に配置されます。共有メモリパラメータで DB インスタンスの 90 パーセントを超えるメモリを使用するように設定すると、Amazon RDS は DB インスタンスを互換性のないパラメータ状態に設定します。

PostgreSQL のメモリ管理については、PostgreSQL のドキュメントの「Resource Consumption」(資源の消費) を参照してください。

Amazon RDS for PostgreSQL の論理レプリケーションの実行

バージョン 10.4 以降、Amazon RDS for PostgreSQL は、PostgreSQL 10 で最初に導入されたパブリケーションおよびサブスクリプション SQL 構文をサポートしています。詳細については、「PostgreSQL のドキュメント」の「論理レプリケーション」を参照してください。

RDS for PostgreSQL DB インスタンスに対する論理レプリケーションの設定については、次で説明します。

論理レプリケーションと論理デコードについて

RDS for PostgreSQL は、PostgreSQL の論理レプリケーションスロットを使用した、ログ先行書き込み (WAL) 変更のストリーミングをサポートしています。また、ロジカルデコーディングの使用もサポートしています。インスタンスで論理的なレプリケーションスロットをセットアップし、それらのスロットを通じてデータベースの変更を pg_recvlogical などのクライアントにストリーミングできます。データベースレベルで論理レプリケーションスロットを作成すると、1 つのデータベースへのレプリケーション接続がサポートされます。

PostgreSQL 論理レプリケーション用の最も一般的なクライアントは、AWS Database Migration Service、または Amazon EC2 インスタンスのカスタム管理ホストです。論理レプリケーションスロットには、ストリームの受信者に関する情報が含まれていません。また、ターゲットをレプリカデータベースとする必要はありません。論理的なレプリケーションスロットをセットアップし、スロットから読み取りを行わない場合、データが書き込まれて、DB インスタンスのストレージがすぐにいっぱいになる可能性があります。

パラメータ、レプリケーション接続タイプ、およびセキュリティロールを使用して、Amazon RDS の PostgreSQL 論理レプリケーションおよび論理デコードをオンにします。論理デコード用のクライアントは、PostgreSQL DB インスタンスのデータベースにレプリケーション接続を確立できる任意のクライアントとすることができます。

RDS for PostgreSQL DB インスタンスに対して論理デコードをオンにするには

  1. 使用しているユーザーアカウントに次のロールがあることを確認します。

    • 論理レプリケーションをオンにできるようにする rds_superuser ロール

    • 論理スロットを管理し、論理スロットを使用してデータをストリーミングするためのアクセス許可を付与する rds_replication ロール

  2. rds.logical_replication 静的パラメータを 1 に設定します。このパラメータを適用する一環として、wal_levelmax_wal_sendersmax_replication_slotsmax_connections の各パラメータも設定します。これらのパラメータの変更により、生成される WAL が増えることがあるため、論理スロットを使用する場合にのみ、rds.logical_replication パラメータを設定してください。

  3. 静的 rds.logical_replication パラメータの DB インスタンスを再起動して有効にします。

  4. 次のセクションの説明に従って論理的なレプリケーションスロットを作成します。このプロセスでは、デコードプラグインを指定する必要があります。現在、RDS for PostgreSQL は、PostgreSQL に付属する出力プラグイン test_decoding および wal2json をサポートしています。

PostgreSQL 論理的なデコードの使用の詳細については、PostgreSQL のドキュメントを参照してください。

論理的なレプリケーションスロットの使用

SQL コマンドを使用して、論理的なスロットを操作できます。例えば、次のコマンドは、デフォルトの PostgreSQL 出力プラグイン test_slot を使用して、test_decoding という論理的なスロットを作成します。

SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding'); slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)

論理的なスロットを一覧表示するには、次のコマンドを使用します。

SELECT * FROM pg_replication_slots;

論理的なスロットを削除するには、次のコマンドを使用します。

SELECT pg_drop_replication_slot('test_slot'); pg_drop_replication_slot ----------------------- (1 row)

論理的なレプリケーションスロットのその他の使用例については、PostgreSQL ドキュメントの「Logical Decoding Examples」を参照してください。

論理的なレプリケーションスロットを作成すると、ストリーミングをスタートできます。次の例は、ストリーミングレプリケーションプロトコルで論理的なデコードがどのように制御されるかを示しています。この例では、PostgreSQL ディストリビューションに含まれているプログラム pg_recvlogical を使用しています。これを行うには、レプリケーション接続を許可するようにクライアント認証が設定されている必要があります。

pg_recvlogical -d postgres --slot test_slot -U postgres --host -instance-name.111122223333.aws-region.rds.amazonaws.com -f - --start

pg_replication_origin_statusビューの内容を表示するには、pg_show_replication_origin_status 関数を照会します。

SELECT * FROM pg_show_replication_origin_status(); local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)

stats_temp_directory の RAM ディスク

RDS for PostgreSQL パラメータ rds.pg_stat_ramdisk_size を使用して、PostgreSQL stats_temp_directory を保存する RAM ディスクに割り当てられたシステムメモリを指定できます。RAM ディスクパラメータは、Amazon RDS のすべての PostgreSQL バージョンで利用できます。

特定のワークロードでは、このパラメータを設定することでパフォーマンスが向上し、I/O 要件を軽減することができます。stats_temp_directory の詳細については、PostgreSQL のドキュメントを参照してください。

stats_temp_directory の RAM ディスクをセットアップにするには、rds.pg_stat_ramdisk_size パラメータを、DB インスタンスで使用されるパラメータグループのゼロ以外の値に設定します。パラメータ値は MB 単位です。変更を反映するには DB インスタンスを再起動する必要があります。パラメータの設定の詳細については、「パラメータグループを使用する」を参照してください。

例えば、次の AWS CLI コマンドは、RAM ディスクパラメータを 256 MB に設定します。

aws rds modify-db-parameter-group \ --db-parameter-group-name pg-95-ramdisk-testing \ --parameters "ParameterName=rds.pg_stat_ramdisk_size, ParameterValue=256, ApplyMethod=pending-reboot"

再起動後は、次のコマンドを実行して stats_temp_directory のステータスを確認します。

postgres=> SHOW stats_temp_directory;

コマンドは次の情報を返します。

stats_temp_directory --------------------------- /rdsdbramdisk/pg_stat_tmp (1 row)

RDS for PostgreSQL のテーブルスペース

RDS for PostgreSQL では、互換性のためにテーブルスペースがサポートされています。すべてのストレージが 1 つの論理ボリューム上にあるため、I/O 分割または分離にテーブルスペースを使用することはできません。当社のベンチマークと経験は、ほとんどのユースケースで 単一の論理的なボリュームが最適なセットアップであることを示しています。

RDS for PostgreSQL DB インスタンスでテーブルスペースを作成して使用するには、rds_superuser ロール が必要です。RDS for PostgreSQL DB インスタンスのメインユーザーアカウント (デフォルトの名前は postgres) は、このロールのメンバーです。詳細については、「rds_superuser ロールを理解する」を参照してください。

表空間の作成時にファイル名を指定する場合、パスの接頭辞は /rdsdbdata/db/base/tablespace になります。次の例では、/rdsdbdata/db/base/tablespace/dataに表空間ファイルを配置しています。この例では、dbadmin ユーザー (ロール) が存在し、テーブルスペースの操作に必要な rds_superuser ロールが付与されていることを前提としています。

postgres=> CREATE TABLESPACE act_data OWNER dbadmin LOCATION '/data'; CREATE TABLESPACE

PostgreSQL テーブルスペースの詳細については、PostgreSQL のドキュメントの「Tablespaces」(テーブル空間) を参照してください。