Amazon RDS for PostgreSQL
Amazon RDS では、PostgreSQL の複数のバージョンを実行する DB インスタンスがサポートされています。利用可能なバージョンのリストについては、「利用可能な PostgreSQL データベースのバージョン」を参照してください。
2022 年 4 月 26 日に、PostgreSQL 9.6 の廃止が予定されています。詳細については、「PostgreSQL バージョン 10 の廃止 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 の一般的な管理タスク
- データベースプレビュー環境の使用
- データベースプレビュー環境の PostgreSQL バージョン 15
- 利用可能な PostgreSQL データベースのバージョン
- サポートされている PostgreSQL 拡張機能バージョン
- PostgreSQL データベースエンジンを実行する DB インスタンスへの接続
- SSL/TLS を使用して RDS for PostgreSQL への接続を保護する
- Amazon RDS for PostgreSQL で Kerberos 認証を使用する
- アウトバウンドネットワークアクセスでカスタム DNS サーバーを使用する
- Amazon RDS の PostgreSQL DB エンジンのアップグレード
- PostgreSQL DB スナップショットエンジンのバージョンのアップグレード
- Amazon RDS for PostgreSQL でのリードレプリカの使用
- Amazon RDS の PostgreSQL にデータをインポートする
- RDS for PostgreSQL DB インスタンスから Amazon S3 へのデータのエクスポート
- RDS for PostgreSQL DB インスタンスから AWS Lambda 関数を呼び出す
- Amazon RDS for PostgreSQL でサポートされている PostgreSQL の機能を使用する
- Amazon RDS for PostgreSQL の一般的な DBA タスク
- RDS for PostgreSQL の待機イベントでのチューニング
- Amazon RDS for PostgreSQL で PostgreSQL 拡張機能を使用する
- Amazon RDS for PostgreSQL でサポートされている外部データラッパーを使用する
- Trusted Language Extensions for PostgreSQL を使用した操作
Amazon RDS for PostgreSQL の一般的な管理タスク
以下に示しているのは、Amazon RDS for PostgreSQL DB インスタンスで実行する一般的な管理タスクと、各タスクの関連ドキュメントへのリンクです。
タスク領域 | 関連資料 |
---|---|
Amazon RDS を初めてセットアップして使う DB インスタンスを作成する前に、いくつかの前提条件を満たしていることを確認してください。例えば、DB インスタンスが作成されると、アクセスを禁止するファイアウォールがデフォルトで設定されます。したがって、DB インスタンスにアクセスするために、IP アドレスとネットワーク設定が正しく指定されたセキュリティグループを作成する必要があります。 |
|
Amazon RDS DB インスタンスを理解する 本稼働用に DB インスタンスを作成する場合、インスタンスクラス、ストレージタイプ、およびプロビジョンド IOPS が Amazon RDS でどのように機能するか理解する必要があります。 |
|
利用可能な PostgreSQL バージョンの検索 Amazon RDS は、PostgreSQL の複数のバージョンをサポートします。 |
|
高可用性およびフェイルオーバーサポートのセットアップ 本稼働 DB インスタンスは、マルチ AZ 配置を使用する必要があります。マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。 |
|
Amazon Virtual Private Cloud (VPC) ネットワークについて AWS アカウントにデフォルト VPC がある場合、DB インスタンスがデフォルト VPC 内に自動的に作成されます。場合によっては、アカウントにデフォルトの VPC がないため、VPC に DB インスタンスが必要な場合もあります。このような場合、DB インスタンスを作成する前に VPC とサブネットグループを作成します。 |
|
Amazon RDS PostgreSQL にデータをインポートする Amazon RDS の PostgreSQL DB インスタンスにデータをインポートするには、さまざまなツールを使用できます。 |
|
読み取り専用リードレプリカ (プライマリおよびスタンバイ) のセットアップ RDS for PostgreSQL では、同じ AWS リージョン、および、プライマリインスタンスとは別の AWS リージョンの両方で、リードレプリカがサポートされます。 |
|
セキュリティグループの理解 デフォルトでは、DB インスタンスが作成されると、アクセスを禁止するファイアウォールが設定されます。そのファイアウォールを介してアクセスできるようにするには、DB インスタンスをホストする VPC に関連付けられている VPC セキュリティグループのインバウンドルールを編集します。 |
|
パラメータグループおよび機能のセットアップ DB インスタンスのデフォルトパラメータを変更するには、カスタム DB パラメータグループを作成し、設定をそのパラメータグループに変更します。DB インスタンスを作成する前にこの操作を行うと、インスタンスの作成時にカスタム DB パラメータグループを選択できます。 |
|
PostgreSQL DB インスタンスへの接続 セキュリティグループを作成し、それを DB インスタンスに関連付けると、 |
|
DB インスタンスのバックアップと復元 バックアップが自動的に作成されるように DB インスタンスを設定したり、スナップショットを手動で作成したりできます。そうすることで後で、そのバックアップまたはスナップショットからインスタンスを復元できます。 |
|
DB インスタンスのアクティビティとパフォーマンスのモニタリング CloudWatch Amazon RDS メトリクス、イベント、および拡張モニタリングを使用することで、PostgreSQL DB インスタンスをモニタリングできます。 |
|
PostgreSQL データベースバージョンのアップグレード PostgreSQL DB インスタンスのメジャーバージョンとマイナーバージョンの両方をアップグレードできます。 |
|
ログファイルの操作 PostgreSQL DB インスタンスのログファイルにアクセスできます。 |
|
PostgreSQL DB インスタンスに関するベストプラクティスの理解 Amazon RDS での PostgreSQL の使用に関するいくつかのベストプラクティスが見つかります。 |
RDS for PostgreSQL の重要な機能の理解と使用に役立つ、このガイドの他のセクションのリストは次のとおりです。
データベースプレビュー環境の使用
PostgreSQL コミュニティは、ベータバージョンを含め、新しい PostgreSQL バージョンとエクステンションを絶えずリリースしています。これにより、PostgreSQL ユーザーは新しい PostgreSQL バージョンを早期に試すことができます。PostgreSQL コミュニティのベータリリースプロセスの詳細については、PostgreSQL ドキュメントの「ベータ情報
データベースプレビュー環境の RDS for PostgreSQL DB インスタンスは、機能的に他の RDS for PostgreSQL インスタンスに似ています。ただし、プレビューバージョンは本稼働に使用できません。
次の重要な制約事項に留意してください。
-
すべての DB インスタンスは、作成から 60 日後にバックアップおよびスナップショットとともに削除されます。
-
DB インスタンスは、Amazon VPC サービスに基づく仮想プライベートクラウド (VPC) でのみ作成できます。
-
汎用 SSD およびプロビジョンド IOPS SSD ストレージのみを使用できます。
-
DB インスタンスに関して AWS サポートからヘルプを受けることはできません。代わりに、AWS マネージド Q&A コミュニティ、AWS re:Post
に質問を投稿できます。 -
DB インスタンスのスナップショットを本稼働環境にコピーすることはできません。
プレビューでは、以下のオプションがサポートされています。
-
DB インスタンスは、M6i、R6i、M6g、M5、T3、R6g、および R5 インスタンスタイプのみで作成できます。RDS インスタンスクラスの詳細については、「 DB インスタンスクラス」を参照してください。
-
シングル AZ 配置とマルチ AZ 配置の両方を使用できます。
-
スタンダードの PostgreSQL ダンプおよびロード機能を使用して、データベースをデータベースプレビュー環境にエクスポートしたり、データベースプレビュー環境にインポートしたりできます。
プレビュー環境でサポートされない機能
以下の機能は、プレビュー環境で使用できません。
-
クロスリージョンスナップショットのコピー
-
クロスリージョンリードレプリカ
プレビュー環境での新しい DB インスタンスの作成
プレビュー環境で DB インスタンスを作成するには、次の手順を使用します。
プレビュー環境で新しい DB インスタンスを作成するには
AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[ダッシュボード] を選択します。
-
[Dashboard] (ダッシュボード) ページで、次の図に示すように、[Dashboard] (ダッシュボード) ページの [Database Preview Environment] (データベースプレビュー環境) セクションを見つけます。
また、[Database Preview Environment]
(データベースプレビュー環境) に直接移動することもできます。先に進む前に、制限事項を確認して同意する必要があります。 -
RDS for PostgreSQL DB インスタンスを作成するには、任意の Amazon RDS DB インスタンスを作成する場合と同じプロセスに従います。詳細については、DB インスタンスの作成 下の コンソール 手順を参照してください。
RDS API または AWS CLI を使用してデータベースプレビュー環境でインスタンスを作成するには、次のエンドポイントを使用します。
rds-preview.us-east-2.amazonaws.com
データベースプレビュー環境の PostgreSQL バージョン 15
PostgreSQL バージョン 15 が Amazon RDS データベースプレビュー環境で利用可能になりました。PostgreSQL バージョン 15 には、次の PostgreSQL ドキュメントに記載されているいくつかの改善点が含まれています。
データベースプレビュー環境の詳細については、「データベースプレビュー環境の使用」を参照してください。コンソールからプレビュー環境にアクセスするには、https://console.aws.amazon.com/rds-preview/
利用可能な PostgreSQL データベースのバージョン
Amazon RDS では、PostgreSQL の複数のエディションを実行する DB インスタンスがサポートされています。新しい DB インスタンスを作成する際、現在利用可能な PostgreSQL バージョンであればどれでも指定できます。メジャーバージョン (PostgreSQL 14 など) と、指定したメジャーバージョンで利用可能な任意のマイナーバージョンを指定できます。バージョンを指定しない場合、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 バージョン 10 の廃止
2023 年 4 月 17 日、Amazon RDS では、PostgreSQL 10 の非推奨化を次のスケジュールで予定しています。対策を講じて、メジャーバージョン 10 で実行されている PostgreSQL データベースを PostgreSQL バージョン 14 などの新しいバージョンにアップグレードすることをお勧めします。RDS for PostgreSQL メジャーバージョン 10 DB インスタンスを 10.19 より古い PostgreSQL バージョンからアップグレードするには、最初にバージョン 10.19 にアップグレードしてから、バージョン 14 にアップグレードすることをお勧めします。詳細については、「Amazon RDS の PostgreSQL DB エンジンのアップグレード」を参照してください。
アクションまたは推奨事項 | 日付 |
---|---|
PostgreSQL コミュニティは PostgreSQL 10 を廃止する予定で、この日以降はセキュリティパッチを提供しません。 |
2022 年 11 月 10 日 |
RDS for PostgreSQL 10 DB インスタンスを、PostgreSQL 14 などの新しいメジャーバージョンへのアップグレードを開始します。引き続き PostgreSQL 10 のスナップショットの復元や、バージョン 10 のリードレプリカの作成はできますが、この廃止スケジュールについて、その他の重要な日付と、その影響には注意していてください。 |
2023 年 2 月 14 日まで |
この日付を過ぎると、AWS Management Console または AWS CLI のいずれを使用しても、PostgreSQL メジャーバージョン 10 で新しい Amazon RDS インスタンスを作成することはできません。 |
2023 年 2 月 14 日 |
この日以降、Amazon RDS は、PostgreSQL 10 インスタンスを、バージョン 14 に自動的にアップグレードします。PostgreSQL 10 のデータベーススナップショットを復元すると、Amazon RDS は復元されたデータベースを、PostgreSQL 14 に自動的にアップグレードします。 |
2023 年 4 月 17 日 |
RDS for PostgreSQL バージョン 10 の廃止に関する詳しい情報については、AWS re: POST の 「[お知らせ]: RDS for PostgreSQL 10 の廃止
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
RDS for PostgreSQL の非推奨ポリシーの詳細については、「Amazon RDS のよくある質問
サポートされている PostgreSQL 拡張機能バージョン
RDS for PostgreSQL は、多くの PostgreSQL エクステンションをサポートしています。PostgreSQL コミュニティでは、これらをモジュールと呼ぶことがあります。エクステンションは、PostgreSQL エンジンが提供する機能を拡張します。Amazon RDS がサポートするエクステンションのリストは、該当する PostgreSQL バージョンのデフォルトの DB パラメータグループで確認できます。また、次の例に示すように、psql
で rds.extensions
パラメータを表示することで、最新のエクステンションのリストを確認することもできます。
SHOW rds.extensions;
マイナーバージョンのリリースで追加されたパラメータは、rds.extensions
で psql
パラメータを使用する際に正しく表示されない場合があります。
RDS for PostgreSQL 13 以降、rds_superuser
以外のデータベースユーザーがインストールできる拡張機能があります。これらは、信頼できる拡張機能として知られています。詳細については、「PostgreSQL 信頼できるエクステンション」を参照してください。
RDS for PostgreSQL の特定のバージョンでは、rds.allowed_extensions
パラメータに対応しています。このパラメータにより、rds_superuser
は RDS for PostgreSQL DB インスタンスにインストールできる拡張機能を制限します。(詳しくは、「PostgreSQL エクステンションのインストールを制限する」を参照してください。)
利用できる各 RDS for PostgreSQL バージョンでサポートされている 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 EXTENSION
や DROP 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
ロールを必要としないユーザーがインストールできるエクステンションを示します。
-
bool_plperl
-
jsonb_plperl
利用できる各 RDS for PostgreSQL バージョンでサポートされている PostgreSQL 拡張機能のリストについては、Amazon RDS for PostgreSQL リリースノートの「Amazon RDS でサポートされる PostgreSQL の拡張機能」を参照してください。
Amazon RDS for PostgreSQL でサポートされている PostgreSQL の機能を使用する
Amazon RDS for PostgreSQL は、PostgreSQL の代表的な機能の多くをサポートしています。例えば、PostgreSQL には、データベースの定期的なメンテナンスを実行する自動バキューム機能があります。autovacuum 機能は、デフォルトでアクティブになっています。この機能をオフにすることはできますが、オンにしておくことを強くお勧めします。この機能を理解し、それを正しく動作させるために何ができるかを把握することは、どの 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 でサポートされているその他の機能については、次で説明します。
トピック
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 以降、RDS for PostgreSQL は、PostgreSQL 10 で導入されたパブリケーションおよびサブスクリプション SQL 構文をサポートしています。詳細については、「PostgreSQL のドキュメント」の「論理レプリケーション
PostgreSQL 10 で導入されたネイティブの PostgreSQL 論理レプリケーション機能に加えて、PostgreSQL 用 RDS は pglogical
拡張機能もサポートしています。詳細については、「pglogical を使用してインスタンス間でデータを同期する」を参照してください。
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 インスタンスに対して論理デコードをオンにするには
-
使用しているユーザーアカウントに次のロールがあることを確認します。
-
論理レプリケーションをオンにできるようにする
rds_superuser
ロール -
論理スロットを管理し、論理スロットを使用してデータをストリーミングするためのアクセス許可を付与する
rds_replication
ロール
-
-
rds.logical_replication
静的パラメータを 1 に設定します。このパラメータを適用する一環として、wal_level
、max_wal_senders
、max_replication_slots
、max_connections
の各パラメータも設定します。これらのパラメータの変更により、生成される WAL が増えることがあるため、論理スロットを使用する場合にのみ、rds.logical_replication
パラメータを設定してください。 -
静的
rds.logical_replication
パラメータの DB インスタンスを再起動して有効にします。 -
次のセクションの説明に従って論理的なレプリケーションスロットを作成します。このプロセスでは、デコードプラグインを指定する必要があります。現在、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 を表すため、整数値を使用する必要があります。表現、数式、関数が rds.pg_stat_ramdisk_size
パラメータに対して有効ではありません。変更が反映されるように、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
) は、このロールのメンバーです。詳細については、「PostgreSQL のロールとアクセス権限について」を参照してください。
表空間の作成時にファイル名を指定する場合、パスの接頭辞は /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
EBCDIC やその他のメインフレーム移行のための RDS for PostgreSQL 照合順序
RDS for PostgreSQL バージョン 10 以降には ICU バージョン 60.2 が含まれています。これは Unicode 10.0 に基づいており、Unicode Common Locale Data Repositor、CLDR 32 からの照合順序が含まれています。これらのソフトウェア国際化ライブラリにより、オペレーティングシステムやプラットフォームに関係なく、文字エンコーディングが一貫した方法で表示されます。Unicode CLDR-32 の詳細については、Unicode CLDR のウェブサイトの「CLDR 32 リリースノート
バージョン 14.3 以降、RDS for PostgreSQL には、EBCDIC ベースのシステムからのデータ統合と変換に役立つ照合順序も含まれています。Extended Binary Coded Decimal Interchange Code (EBCDIC) エンコーディングはメインフレームのオペレーティングシステムで一般的に使用されます。マッピングAmazon RDS が提供するこれらの照合順序は、EBCDIC コードページに直接マッピングされる Unicode 文字のみをソートするように狭義に定義されています。文字は、変換後のデータ検証を可能にするために、EBCDIC コードポイント順にソートされます。これらの照合順序には、非正規化された形式や、ソース EBCDIC コードページの文字に直接マッピングされない Unicode 文字は含まれていません。
EBCDIC コードページと Unicode コードポイント間の文字マッピングは、IBM が公開している表に基づいています。一式は、IBM から圧縮ファイル
Unicode to EBCDIC collations table — メインフレームのデータ移行ツールの中には、LATIN1 または LATIN9 を内部的に使用してデータのエンコードと処理を行うものがあります。このようなツールは、ラウンドトリップ方式を使用してデータの整合性を維持し、逆変換をサポートします。この表の照合順序は、特別な処理を必要としない LATIN1 エンコーディングを使用してデータを処理するツールで使用できます。
Unicode to LATIN9 collations table — これらの照合順序は、どの RDS for PostgreSQL データベースでも使用できます。
次の表に、EBCDIC コードページを Unicode コードポイントにマッピングする RDS for PostgreSQL の照合順序を示します。IBM コードページの順序に基づいてソートする必要があるアプリケーション開発には、この表の照合順序を使用することをお勧めします。
PostgreSQL 照合順序名 | コードページのマッピングとソート順序の説明 |
---|---|
da-DK-cp277-x-icu | IBM EBCDIC コードページ 277 (変換表ごと) に直接マッピングされる Unicode 文字は、IBM CP 277 コードポイント順にソートされます。 |
de-DE-cp273-x-icu | IBM EBCDIC コードページ 273 (変換表ごと) に直接マッピングされる Unicode 文字は、IBM CP 273 コードポイント順にソートされます。 |
en-GB-cp285-x-icu | IBM EBCDIC コードページ 285 (変換表ごと) に直接マッピングされる Unicode 文字は、IBM CP 285 コードポイント順にソートされます。 |
en-US-cp037-x-icu | IBM EBCDIC コードページ 037 (変換表ごと) に直接マッピングされる Unicode 文字は、IBM CP 037 コードポイント順にソートされます。 |
es-ES-cp284-x-icu | IBM EBCDIC コードページ 284 (変換表ごと) に直接マッピングされる Unicode 文字は、IBM CP 284 コードポイント順にソートされます。 |
fi-FI-cp278-x-icu | IBM EBCDIC コードページ 278 (変換表ごと) に直接マップされる Unicode 文字は、IBM CP 278 コードポイント順にソートされます。 |
fr-fr-cp297-X-ICU | IBM EBCDIC コードページ 297 (変換表ごと) に直接マップされる Unicode 文字は、IBM CP 297 コードポイント順にソートされます |
it-IT-cp280-x-icu | IBM EBCDIC コードページ 280 (変換表ごと) に直接マップされる Unicode 文字は、IBM CP 280 コードポイント順にソートされます |
nl-BE-cp500-x-icu | IBM EBCDIC コードページ 500 (変換テーブルごと) に直接マップされる Unicode 文字は、IBM CP 500 コードポイント順にソートされます |
Amazon RDS には、IBM が公開しているテーブルを使用して、LATIN9 文字にマッピングされる Unicode コードポイントをソースデータの EBCDIC コードページに従って元のコードポイントの順序でソートする追加の照合セットが用意されています。
PostgreSQL 照合順序名 | コードページのマッピングとソート順序の説明 |
---|---|
da-DK-cp1142m-x-icu | IBM EBCDIC コードページ 1142 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1142 コードポイント順にソートされます。 |
de-DE-cp1141m-x-icu | IBM EBCDIC コードページ 1141 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1141 コードポイント順にソートされます。 |
en-GB-cp1146m-x-icu | IBM EBCDIC コードページ 1146 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1146 コードポイント順にソートされます。 |
en-US-cp1140m-x-icu | IBM EBCDIC コードページ 1140 (変換テーブルごと) から最初に変換された LATIN9 文字にマップされる Unicode 文字は、IBM CP 1140 コードポイント順にソートされます。 |
es-ES-cp1145m-x-icu | IBM EBCDIC コードページ 1145 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1145 コードポイント順にソートされます。 |
fi-FI-cp1143m-x-icu | IBM EBCDIC コードページ 1143 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1143 コードポイント順にソートされます。 |
fr-FR-cp1147m-x-icu | IBM EBCDIC コードページ 1147 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1147 コードポイント順にソートされます。 |
it-IT-cp1144m-x-icu | IBM EBCDIC コードページ 1144 (変換テーブルごと) から最初に変換された LATIN9 文字にマッピングされる Unicode 文字は、IBM CP 1144 コードポイント順にソートされます。 |
nl-BE-cp1148m-x-icu | IBM EBCDIC コードページ 1148 (変換テーブルごと) から最初に変換された LATIN9 文字にマップされる Unicode 文字は、IBM CP 1148 コードポイント順にソートされます。 |
以下に、RDS for PostgreSQL 照合順序の使用例を示します。
db1=>
SELECT pg_import_system_collations('pg_catalog');pg_import_system_collations ----------------------------- 36
db1=>
SELECT '¤' < 'a' col1;col1 ------ t
db1=>
SELECT '¤' < 'a' COLLATE "da-DK-cp277-x-icu" col1;col1 ------ f
IBM コードページの順序に基づいてソートする必要があるアプリケーション開発には、Unicode to EBCDIC collations table と Unicode to LATIN9 collations table の照合順序を使用することをお勧めします。次の照合順序 (接尾辞に「b」の文字が付いている) は、pg_collation
でも表示されますが、特定のコードポイントシフトを持つコードページをマッピングする AWS のメインフレームデータ統合および移行ツールで使用することを目的としており、照合順序で特別な処理が必要です。つまり、以下の照合順序の使用は推奨されません。
da-DK-277b-x-icu
da-DK-1142b-x-icu
de-DE-cp273b-x-icu
de-DE-cp1141b-x-icu
en-GB-cp1146b-x-icu
en-GB-cp285b-x-icu
en-US-cp037b-x-icu
en-US-cp1140b-x-icu
es-ES-cp1145b-x-icu
es-ES-cp284b-x-icu
fi-FI-cp1143b-x-icu
fr-FR-cp1147b-x-icu
fr-FR-cp297b-x-icu
it-IT-cp1144b-x-icu
it-IT-cp280b-x-icu
nl-BE-cp1148b-x-icu
nl-BE-cp500b-x-icu
メインフレーム環境から AWS へのアプリケーションの移行に関する詳細については、「AWSMainframe Modernization とは?」を参照してください。
PostgreSQL における照合順序の管理の詳細については、PostgreSQL のドキュメントの「Collation Support