メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

Amazon RDS 上の PostgreSQL

Amazon RDS では、PostgreSQL の複数のバージョンを実行する DB インスタンスがサポートされています。DB インスタンス、DB スナップショット、ポイントインタイムの復元とバックアップを作成できます。PostgreSQL を実行する DB インスタンスは、マルチ AZ 配置、リードレプリカ (バージョン 9.3.5 以降)、プロビジョンド IOPS をサポートしており、VPC 内で作成できます。また、それらの DB インスタンスに SSL を使用して接続することもできます。

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

標準的な SQL クライアントアプリケーションを使用して、クライアントコンピューターからインスタンスに対してコマンドを実行できます。たとえば、pgAdmin (PostgreSQL 用に普及しているオープンソースの管理および開発ツール) や psql (PostgreSQL インストールに含まれるコマンドラインユーティリティ) などのアプリケーションを使用できます。マネージド型サービスを提供するため、Amazon RDS では DB インスタンスへのホストアクセスは許可されません。また、上位の権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されます。Amazon RDS では、標準的な SQL クライアントアプリケーションを使用した、DB インスタンス上のデータベースへのアクセスがサポートされています。Amazon RDS では、Telnet や Secure Shell (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) のセキュリティ要件も満たしており、AWS GovCloud (米国) リージョン内の FedRAMP HIGH ベースラインにおいて FedRAMP Joint Authorization Board (JAB) Provisional Authority to Operate (P-ATO) に認定されています。サポートされるコンプライアンス標準の詳細については、「AWS クラウドコンプライアンス」を参照してください。

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

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

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

タスク領域 関連資料

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

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

Amazon RDS のセットアップ

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

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

DB インスタンスクラス

Amazon RDS ストレージの種類

Amazon RDS Provisioned IOPS ストレージによるパフォーマンスの向上

サポートされている PostgreSQL バージョンの検索

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

サポートされている PostgreSQL データベースのバージョン

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

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

高可用性 (マルチ AZ)

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

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

EC2-VPC または EC2-Classic のどちらのプラットフォームを使用するか判断する

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

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

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

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

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

Amazon RDS の PostgreSQL は同じリージョンおよびマスターインスタンスとは別のリージョンの両方で、リードレプリカをサポートします。

PostgreSQL、MySQL、および MariaDB リードレプリカの使用

PostgreSQL リードレプリカ (バージョン 9.3.5 以降)

リージョン間でリードレプリカをレプリケート

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

デフォルトでは、DB インスタンスが作成されると、アクセスを禁止するファイアウォールが設定されます。したがって、DB インスタンスにアクセスするために、正しい IP アドレスとネットワーク構成を備えたセキュリティグループを作成する必要があります。

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

EC2-VPC または EC2-Classic のどちらのプラットフォームを使用するか判断する

Amazon RDS セキュリティグループ

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

DB インスタンスに特定のデータベースパラメーターが必要になる場合は、DB インスタンスを作成する前にパラメータグループを作成する必要があります。

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

PostgreSQL の一般的な DBA タスクの実行

DB インスタンスに特定のデータベースオプションが必要になる場合は、DB インスタンスを作成する前にオプショングループを作成する必要があります。

付録: PostgreSQL の一般的な DBA タスク

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

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

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

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

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

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

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

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

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

DB インスタンスのメトリクスの表示

Amazon RDS のイベントの表示

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

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

PostgreSQL DB インスタンスをアップグレードする

メジャーバージョンアップグレード

ログファイルの操作

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

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

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

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

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

Amazon RDS PostgreSQL 計画に必要になる情報

Amazon RDS では、PostgreSQL の複数のエディションを実行する DB インスタンスがサポートされています。このセクションでは、Amazon RDS での PostgreSQL の操作方法について説明します。また、PostgreSQL DB インスタンスの制限も認識しておく必要があります。

DB インスタンスへの PostgreSQL データのインポートについては、「Amazon RDS 上の PostgreSQL にデータをインポートする」を参照してください。

rds_superuser ロールの使用

DB インスタンスを作成すると、作成したマスターユーザーシステムアカウントが rds_superuser ロールに割り当てられます。rds_superuser ロールは PostgreSQL のスーパーユーザーロール (ローカルインスタンスでは通常 postgres) に似ていますが、いくつかの制限があります。PostgreSQL のスーパーユーザーロールと同様に、rds_superuser ロールは、DB インスタンスに対して最大の権限を持っています。ユーザーが DB インスタンスに対して最大のアクセス権を必要としない場合は、ユーザーにこのロールを割り当てないでください。

rds_superuser ロールでは以下の操作を実行できます。

  • Amazon RDS で使用できる拡張機能の追加詳細については、「サポートされている PostgreSQL の機能と拡張機能」および PostgreSQL ドキュメントを参照してください

  • テーブルスペースを管理する (作成と削除も含む)。詳細については、PostgreSQL のドキュメントのこのセクションを参照してください。

  • pg_stat_activity コマンドを使用して、rds_superuser ロールが割り当てられていないすべてのユーザーを表示し、pg_terminate_backendpg_cancel_backend コマンドを使用して、それらのユーザーの接続を強制終了する。

  • rds_superuser ロール以外のすべてのロールに対してレプリケーション属性を付与する/取り消す。. 詳細については、PostgreSQL のドキュメントのこのセクションを参照してください。

サポートされている PostgreSQL データベースのバージョン

現在、Amazon RDS は、以下の PostgreSQL バージョンをサポートしています。

Amazon RDS での PostgreSQL バージョン 9.6.1

PostgreSQL バージョン 9.6.1 には、いくつかの新機能および機能向上が含まれています。PostgreSQL 9.6.1 の修正と機能向上については、PostgreSQL のドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。PostgreSQL 9.6.1 用の Amazon RDS を使用した並列クエリおよびフレーズ検索の実行については、「AWS データベースブログ」を参照してください。

PostgreSQL バージョン 9.6.1 には次の変更が含まれています。

  • 並列クエリ実行: 大きな読み取り専用クエリの並列実行をサポートし、順次スキャン、ハッシュ結合、ネストループ、集計を並行して実行できます。デフォルトでは、並列クエリ実行は有効になっていません。それを許可するには、パラメーター max_parallel_workers_per_gather に 0 より大きい値を設定します。

  • 更新された postgres_fdw の拡張: リモート JOINs、SORTs、UPDATEs、DELETE 処理をサポートします。

  • PL/v8 の更新: PL/v8 言語のバージョン 1.5.3 を提供します。

  • PostGIS バージョンの更新: 次をサポートします。POSTGIS="2.3.0 r15146" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel 4.9.2、2015 年 9 月 8 日 " GDAL="GDAL 2.1.1、2016 年 7 月 7 日リリース " LIBXML="2.9.1" LIBJSON="0.12" RASTER

  • バキュームの改善: バキュームの停止操作中、不要なページをスキャンを回避します。

  • フレーズの全文検索サポート: 新しい演算子 <-> と <N> を使用して、tsquery 入力でフレーズ検索クエリを指定する機能をサポートしています。

  • 2 つの新しい拡張: bloomBloom フィルタpg_visibility に基づくインデックスアクセス方法で、マップの可視性とテーブルのページレベルの可視性情報を確認する方法を提供します。

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して新しい PostgreSQL 9.6.1 データベースのインスタンスを作成できます。また、メジャーバージョンアップグレードを使用した、既存の PostgreSQL 9.5 インスタンスをアップグレードすることもできます。DB インスタンスをバージョン 9.3 または 9.4 から 9.6 へアップグレードする場合は、最初に次の主要バージョンにポイントアンドクリックのアップグレードを実行する必要があります。各アップグレード操作で、DB インスタンスが短時間使用できなくなります。

Amazon RDS での PostgreSQL バージョン 9.5.4

PostgreSQL バージョン 9.5.4 には、以前のバージョンで見つかった問題に対するいくつかの修正が含まれています。9.5.4 に含まれる修正の詳細については、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

PostgreSQL バージョン 9.4 から、PostgreSQL は論理レプリケーションのデコードを使用した WAL 変更のストリーミングをサポートしています。Amazon RDS は、PostgreSQL バージョン 9.4.9 以降および 9.5.4 以降の論理レプリケーションをサポートしています。Amazon RDS での PostgreSQL の論理レプリケーションの詳細については、「Amazon RDS の PostgreSQL の論理レプリケーション」を参照してください。

Amazon RDS の PostgreSQL バージョン 9.5.4 から、コマンド「ALTER USER WITH BYPASSRLS」がサポートされます。

PostgreSQL バージョン 9.4.9 以降とバージョン 9.5.4 以降はイベントトリガーをサポートし、Amazon RDS はこれらのバージョンのトリガーもサポートしています。マスターユーザーアカウントを使用して、イベントトリガーを作成、変更、名前変更、および削除できます。イベントトリガーは DB インスタンスレベルであるため、インスタンスのすべてのデータベースに適用できます。Amazon RDS での PostgreSQL イベントトリガーの詳細については、「Amazon RDS での PostgreSQL のイベントトリガー」を参照してください。

Amazon RDS での PostgreSQL バージョン 9.5.2

PostgreSQL バージョン 9.5.2 には、以前のバージョンで見つかった問題に対するいくつかの修正が含まれています。9.5.2 の機能の詳細については、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

PostgreSQL バージョン 9.5.2 は、前の世代のインスタンスクラス db.t1、db.m1、db.m2 をサポートしていません。PostgreSQL DB インスタンスがこれらのいずれかのインスタンスクラスを使用している場合は、PostgreSQL バージョン 9.4 からバージョン 9.5.2 までを実行している DB インスタンスをアップグレードする前に、現行世代の db.t2 または db.m3 インスタンスクラスと同程度となるように処理を拡張する必要があります。DB インスタンスクラスの詳細については、「DB インスタンスクラス」を参照してください。

ネイティブ PostgreSQL バージョン 9.5.2 はコマンド「ALTER USER WITH BYPASSRLS」を導入しました。

このリリースには、次のような以前のバージョンでの更新が含まれています。

  • CVE-2016-2193: 同じセッションでクエリ計画が ROLE 複数回再利用する可能性のある問題を修正します。クエリ計画の再利用は、クエリが正しくない Row Level Security (RLS) ポリシーのセットを使用する原因となります。

  • CVE-2016-3065: BRIN インデックスページと pageinspect を使用すると発生する、サーバーがクラッシュするバグを修正します。攻撃者はサーバーのメモリを数バイト公開できる可能性があるため、このクラッシュはセキュリティ上の問題として扱われます。

RDS PostgreSQL 9.5 の主な拡張機能には以下が含まれます。

  • UPSERT: 制約が競合する INSERT を UPDATE に変更するか無視することが可能

  • GROUP BY の分析機能 GROUPING SETS、CUBE、ROLLUP の追加

  • 行レベルのセキュリティ管理の追加

  • 論理レプリケーション中の個々の変更元を特定するためのメソッドを含む、レプリケーションの進捗を追跡するためのメカニズムを作成します。

  • Block Range Index (BRIN) の追加

  • ソート機能の実質パフォーマンスの機能強化を追加

  • マルチ CPU マシンの実質パフォーマンスの機能強化を追加

  • PostGIS 2.2.2 - この最新バージョンの PostGIS を使用するには、バージョン 9.5.2 にアップグレードした後、ALTER EXTENSION UPDATE ステートメントを使用して更新します。

    ALTER EXTENSION POSTGIS UPDATE TO '2.2.2'

  • rds_superuser アカウントが pg_stat_activity 内の autovacuum セッションを表示できるようすることで、autovacuum セッションの可視性が向上しました。たとえば、コマンドの実行をブロックしている autovacuum セッション、あるいは手動で発行される vacuum コマンドよりも実行スピードが遅い autovacuum セッションを特定して終了することもできます。

RDS PostgreSQL バージョン 9.5.2 には以下の新しい拡張機能が含まれます。

  • address_standardizer – 入力アドレスを取り、table、helper lex table、および gaz table に保管されているルールのセットに基づいて正規化します。

  • hstore_plperl – PL/Perl 向けに hstore 型の変換を行います。

  • tsm_system_rows – テーブルサンプリングメソッド SYSTEM_ROWS を提供します。これは SELECT コマンドの TABLESAMPLE 句で使用できます。

  • tsm_system_time – テーブルサンプリングメソッド SYSTEM_TIME を提供します。これは SELECT コマンドの TABLESAMPLE 句で使用できます。

Amazon RDS での PostgreSQL バージョン 9.4.9

PostgreSQL バージョン 9.4.9 には、以前のバージョンで見つかった問題に対するいくつかの修正が含まれています。9.4.9 に含まれる修正の詳細については、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

PostgreSQL バージョン 9.4 から、PostgreSQL は論理レプリケーションのデコードを使用した WAL 変更のストリーミングをサポートしています。Amazon RDS は、PostgreSQL バージョン 9.4.9 以降および 9.5.4 以降の論理レプリケーションをサポートしています。Amazon RDS での PostgreSQL の論理レプリケーションの詳細については、「Amazon RDS の PostgreSQL の論理レプリケーション」を参照してください。

PostgreSQL バージョン 9.4.9 以降とバージョン 9.5.4 以降はイベントトリガーをサポートし、Amazon RDS はこれらのバージョンのトリガーもサポートしています。マスターユーザーアカウントを使用して、イベントトリガーを作成、変更、名前変更、および削除できます。イベントトリガーは DB インスタンスレベルであるため、インスタンスのすべてのデータベースに適用できます。Amazon RDS での PostgreSQL イベントトリガーの詳細については、「Amazon RDS での PostgreSQL のイベントトリガー」を参照してください。

Amazon RDS での PostgreSQL バージョン 9.4.7

PostgreSQL バージョン 9.4.7 には、以前のバージョンで見つかった問題に対するいくつかの修正が含まれています。9.4.7 に含まれる修正の詳細については、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

PostgreSQL バージョン 9.4.7 では、rds_superuser アカウントが pg_stat_activity 内の autovacuum セッションを表示できるようにしたことで、autovacuum セッションの可視性が向上しています。たとえば、コマンドの実行をブロックしている autovacuum セッション、あるいは手動で発行される vacuum コマンドよりも実行スピードが遅い autovacuum セッションを特定して終了することもできます。

Amazon RDS での PostgreSQL バージョン 9.3.14

PostgreSQL バージョン 9.3.14 には、以前のバージョンで見つかったバグに対するいくつかの修正が含まれています。バージョン 9.3.14 の修正のリストについては、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

注記

バージョン 9.3.14 への PostgreSQL リードレプリカのアップグレードは、現在サポートされていません。この問題の修正プログラムは、数週間以内に利用可能になる予定です。

Amazon RDS での PostgreSQL バージョン 9.3.12

PostgreSQL バージョン 9.3.12 には、以前のバージョンで見つかったバグに対するいくつかの修正が含まれています。バージョン 9.3.12 の修正のリストについては、PostgreSQL ドキュメントを参照してください。PostgreSQL DB インスタンスのエンジンバージョンをアップグレードする方法については、「PostgreSQL DB インスタンスをアップグレードする」を参照してください。

PostgreSQL バージョン 9.3.12 では、rds_superuser アカウントが pg_stat_activity 内の autovacuum セッションを表示できるようにしたことで、autovacuum セッションの可視性が向上しています。たとえば、コマンドの実行をブロックしている autovacuum セッション、あるいは手動で発行される vacuum コマンドよりも実行スピードが遅い autovacuum セッションを特定して終了することもできます。

サポートされている PostgreSQL の機能と拡張機能

Amazon RDS は、PostgreSQL の最も一般的な拡張機能と機能の多くをサポートします。具体的には次のとおりです。

Amazon RDS でサポートされる PostgreSQL の一般拡張機能

PostgreSQL には拡張機能が用意されており、1 つのコマンドを使用して関連する機能 (データ型や関数など) をまとめてデータベースにインストールできます。XML データ型は、現在、バージョン 9.3.12 以降でのみサポートされています。

以下のリストに示しているのは、Amazon RDS 上の PostgreSQL で現在サポートされている主要な拡張機能の一部です。PostgreSQL の拡張機能の詳細については、「拡張機能への関連オブジェクトのパッケージ化」を参照してください。

  • データ型の拡張機能:

    • hstore - キー/値のペアのストアを提供します。

    • citext - 大文字と小文字を区別しない文字列型を提供します。

    • ltree - 階層ツリーを模擬した構造に格納されたデータのラベルを表すデータ型を提供します。

    • isn - EAN13、UPC、ISSN、ISBN などの国際標準番号制度に従うデータ型を提供します。

    • cube - 多次元立体を表すデータ型を提供します。

    • ip4r- IP アドレスのデータ型を提供します。これらは、CIDR のデータ型よりも柔軟に使用でき、CIDR のデータ型とは異なりインデックス付けが可能です。この拡張機能によって 6 つのデータ型が追加されます。 (バージョン 9.4.5 でのみサポートされています)

      • ip4 - 1 つの IPv4 アドレス

      • ip4r - IPv4 アドレスの任意の範囲

      • ip6 - 1 つの IPv6 アドレス

      • ip6r - IPv6 アドレスの任意の範囲

      • ipaddress - 1 つの IPv4 または IPv6 アドレス

      • iprange - IPv4 または IPv6 アドレスの任意の範囲

                    

  • 全文検索ディクショナリ:

    • dict_int - 全文検索用のアドオン辞書テンプレート。整数のインデックス作成の制御によく使用されます。

    • unaccent - 語彙素からアクセント (発音区分記号) を削除する全文検索用の辞書。

  • PostGIS、postgis_tiger_geocoder、postgis_topology - PostgreSQL 用の地理空間オブジェクト。

  • dblink- データベースセッション内から他の PostgreSQL データベースへの接続をサポートします。

  • その他の拡張機能

    • earthdistance - 地表上の大圏距離を計算します。

    • fuzzystrmatch - 文字列間の類似度を決定します。

    • intarray - null のない整数の配列を操作する関数と演算子を提供します。

    • postgres_fdw - (バージョン 9.3.12 以降) 外部データラッパーです。これを使用して、外部 PostgreSQL サーバーに保存されたデータにアクセスできます。

    • pg_stat_statements - (バージョン 9.3.12 以降) 実行したすべての SQL ステートメントの実行統計を追跡するための手段を指定します。

    • pgcrypto- 暗号化関数を提供します。

    • pg_trgm - トライグラム一致に基づいて英数字の類似度を決定する関数を提供します。

    • tablefunc - テーブルを返す各種関数を提供します。

    • uuid-ossp - UUID を生成します (http://www.ossp.org/pkg/lib/uuid/ - MIT License) にある OSSP UUID ライブラリが必要)。

    • btree_gin - 特定のデータ型に対して B-tree と同等な動作を実装するサンプル GIN 演算子を提供します。

    • chkpass - 暗号化されたパスワードを格納するために設計されたデータ型を提供します。

    • intagg - 整数型の集約子と列挙子を提供します。このモジュールは現在、使用されなくなりましたが、組み込み関数の互換ラッパーとしてまだ提供されています。

    • tsearch2 - 後方互換性のあるテキスト検索機能を提供します。

    • pgrowlocks - 指定したテーブルの行ロックの情報を提供します。

    • sslinfo - 現在のクライアントが PostgreSQL に接続するときに渡す SSL 証明書についての情報を提供します。

    • pgstattuple - (バージョン 9.4.5 以降) タプルレベルの統計を取得するためのさまざまな機能を提供します。pgstattuple はリレーションの物理的な長さ、「dead」タプルの割合、その他の情報を返します。これらの情報は、バキュームが必要かどうかをユーザーが判断するために役立つことがあります。

      この拡張機能では、テーブルに使用されている領域の大きさ、エントリの数、エントリに使用されている領域の大きさなど、テーブルに関する特定の統計を表示できます。PostgreSQL で、行がテーブルから削除されても、その行はメモリから削除されず、「dead」行としてマークされます。行をメモリから削除するには、「バキューム」アクションをそのテーブルに対して実行する必要があります。pgstattuple 拡張機能を使用すると、テーブルの「dead」行の数を示す統計を表示することで、いつテーブルをバキュームにするかを判断できます。

    • pg_buffercache - (バージョン 9.4.5 以降) 共有バッファキャッシュのリアルタイムでの使用状況を調べるための手段を提供します。

      各 PostgreSQL サーバーは一定数のバッファーを使用します。バッファーの数は、管理者が設定できる shared_buffer_space パラメーターと、顧客が設定できないバッファーブロックサイズパラメーターによって決まります。たとえば、サーバーの shared_buffered が 128 MB で、各ブロックのサイズが 8 KB だとすると、システムに合計 16,384 バッファーがあることになります。この拡張機能を使用すると、サーバーにキャッシュされているテーブル/リレーションを表示できます。サーバーにキャッシュされているデータを使用すると、クエリなどのアクションをより速く実行できます。データはメモリにキャッシュされており、ディスクからロードする必要がないためです。

  • インデックスのタイプ

    • btree_gist - B-tree と同等な動作を実装する GiST インデックス演算子クラスを提供します。

  • サポートされている PL 言語は以下のとおりです。

    • PL/pgSQL

    • PL/Tcl

    • PL/Perl

    • PL/V8 (バージョン 9.3.12 以降)

Amazon RDS がサポートする拡張機能の最新リストはデフォルト DB パラメータグループで見ることができます。以下の例のように、rds.extensions パラメーターを指定して SHOW を実行することで、psql を使用して拡張機能の最新のリストを表示できます。

Copy
SHOW rds.extensions;

PostGIS 用の PostgreSQL の拡張サポート

次の表は、Amazon RDS PostgreSQL のバージョンに付属している PostGIS コンポーネントのバージョンを示しています。

Version PostGIS GEOS GDAL PROJ
9.3.12 2.1.8 r13780 3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.4、2016 年 1 月 25 日リリース

Rel. 4.9.2、2015 年 9 月 8 日

9.3.16 2.1.8 r13780 3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5、2016 年 7 月 1 日リリース

Rel. 4.9.2、2015 年 9 月 8 日

9.4.7

2.1.8 r13780

3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.4、2016 年 1 月 25 日リリース

Rel. 4.9.2、2015 年 9 月 8 日
9.4.9

2.1.8 r13780

3.5.0-CAPI-1.9.0 r4084

GDAL 1.11.5、2016 年 7 月 1 日リリース

Rel. 4.9.2、2015 年 9 月 8 日
9.5.2

2.2.2 r14797

3.5.0-CAPI-1.9.0 r4084

GDAL 2.0.2、2016 年 1 月 26 日リリース

Rel. 4.9.2、2015 年 9 月 8 日
9.5.4

2.2.2 r14797

3.5.0-CAPI-1.9.0 r4084

GDAL 2.0.3、2016 年 7 月 1 日リリース

Rel. 4.9.2、2015 年 9 月 8 日
9.6.1

2.3.0 r15146

3.5.0-CAPI-1.9.0 r4084

GDAL 2.1.1、2016 年 7 月 7 日リリース

Rel. 4.9.2、2015 年 9 月 8 日

PostGIS 拡張を使用する前に、次のコマンドを実行して PostGIS 拡張を作成する必要があります。

Copy
CREATE EXTENSION POSTGIS;

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

PostgreSQL バージョン 9.4 から、PostgreSQL は論理レプリケーションスロットを使用した WAL 変更のストリーミングをサポートしています。Amazon RDS は、PostgreSQL DB インスタンスバージョン 9.4.9 以降および 9.5.4 以降の論理レプリケーションをサポートしています。論理レプリケーションを使用すると、インスタンスで論理レプリケーションスロットをセットアップし、それらのスロットを通じてデータベースの変更を pg_recvlogical などのクライアントにストリーミングできます。論理スロットはデータベースレベルで作成され、1 つのデータベースへのレプリケーション接続がサポートされます。

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

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

PostgreSQL と論理レプリケーションの使用の詳細については、PostgreSQL のドキュメントを参照してください。[https://www.postgresql.org/docs/current/static/logicaldecoding-example.html]

Amazon RDS for PostgreSQL DB インスタンスで論理レプリケーションを有効にするには、以下を実行する必要があります。

  • Amazon RDS の PostgreSQL データベース用に論理レプリケーションを開始する AWS ユーザーアカウントには、rds_superuser ロールおよび rds_replication ロールが必要です。rds_replication ロールは、論理スロットを管理し、論理スロットを使用してデータをストリーミングするアクセス権限を付与します。

  • rds.logical_replication パラメーターを 1 に設定します。これは、有効にするには再起動を必要とする静的なパラメーターです。このパラメーターの適用の一部として、wal_levelmax_wal_sendersmax_replication_slotsmax_connections パラメーターを設定します。これらのパラメーターによって WAL の生成が増える可能性があるため、rds.logical_replication パラメーターを設定するのは、論理スロットを使用している場合のみにする必要があります。

  • 以下で説明するように論理レプリケーションスロットを作成します。このプロセスでは、復号プラグインを指定する必要があります。現在、PostgreSQL に標準で装備されている 'test_decoding' 出力プラグインがサポートされています。

論理レプリケーションスロットの操作

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

Copy
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');

出力は次の例のようになります:

Copy
slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)

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

Copy
SELECT * FROM pg_replication_slots;

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

Copy
SELECT pg_drop_replication_slot('test_slot');

出力は次の例のようになります:

Copy
pg_drop_replication_slot ----------------------- (1 row)

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

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

Copy
pg_recvlogical -d postgres --slot test_slot -U master --host sg-postgresql1.c6c8mresaghgv0.us-west-2.rds.amazonaws.com -f - --start

Amazon RDS での PostgreSQL のイベントトリガー

PostgreSQL バージョン 9.4.9 以降とバージョン 9.5.4 以降はイベントトリガーをサポートし、Amazon RDS はこれらのバージョンのトリガーもサポートしています。マスターユーザーアカウントを使用して、イベントトリガーを作成、変更、名前変更、および削除できます。イベントトリガーは DB インスタンスレベルであるため、インスタンスのすべてのデータベースに適用できます。

たとえば、次のコードは、各 DDL コマンドの最後に現在のユーザーを表示するイベントトリガーを作成します。

Copy
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 インスタンスへのメジャーバージョンのアップグレードを実行するには、インスタンスのアップグレード前にイベントトリガーを削除する必要があります。

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

テーブルスペースは、Amazon RDS 上の PostgreSQL で互換性を維持するためにサポートされています。すべてのストレージが 1 つの論理ボリューム上にあるため、テーブルスペースを IO 分割/分離に使用することはできません。Amazon でのベンチマークと実績から、1 つの論理ボリュームがほとんどのユースケースに最適の設定であるとわかっています。

Amazon RDS の PostgreSQL の Autovacuum

PostgreSQL の auto-vacuum はオプションですが、選択することを強くお勧めします。このパラメーターは、新しい PostgreSQL DB インスタンスではデフォルトでオンになっています。このパラメーターをオフにしないでください。Amazon RDS PostgreSQL で auto-vacuum を使用する方法については、「Amazon RDS での PostgreSQL Autovacuum の使用」を参照してください。

stats_temp_directory の RAM ディスク

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

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

stats_temp_directory の RAM ディスクを有効にするには、rds.pg_stat_ramdisk_size パラメーターを、DB インスタンスで使用されるパラメータグループのゼロ以外の値に設定します。パラメーター値は MB 単位です。変更が有効になる前に、DB インスタンスを再起動する必要があります。

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

Copy
postgres=>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 のステータスを確認します。

Copy
postgres=>show stats_temp_directory;

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

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

PostgreSQL DB インスタンスの制限

最大 40 個の PostgreSQL DB インスタンスを作成できます。以下のリストに示しているのは、Amazon RDS 上の PostgreSQL についての制限です。

  • PostgreSQL DB インスタンスの最小ストレージサイズは 5 GB です。

  • PostgreSQL DB インスタンスの最大ストレージサイズは、インスタンスごとに 6 TB です。

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

PostgreSQL DB インスタンスをアップグレードする

PostgreSQL DB インスタンスを管理できる 2 つのタイプのアップグレードがあります。

  • OS の更新 — Amazon RDS では、セキュリティの修正や OS の変更を適用するために、基礎となる DB インスタンスのオペレーティングシステムの更新が必要になる場合があります。RDS コンソール、AWS Command Line Interface (AWS CLI)、または RDS API を使用して、Amazon RDS に OS の更新を適用するタイミングを指定できます。

    OS 更新接続の詳細については、「DB インスタンスまたは DB クラスターのオペレーティングシステムの更新」を参照してください

  • データベースエンジンの更新 — Amazon RDS が新バージョンのデータベースエンジンをサポートすると、DB インスタンスをその新バージョンにアップグレードできます。アップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。Amazon RDS は、PostgreSQL の DB インスタンスのメジャーおよびマイナーバージョンアップグレードをサポートしています。

    PostgreSQL DB エンジンをアップグレードする方法の詳細については、「PostgreSQL DB エンジンのアップグレード」を参照してください。

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

Amazon RDS では、PostgreSQL DB インスタンスの SSL 暗号化がサポートされています。SSL を使用して、アプリケーションと PostgreSQL DB インスタンスとの PostgreSQL 接続を暗号化できます。また、PostgreSQL DB インスタンスへのすべての接続に SSL の使用を強制することができます。

SSL は、PostgreSQL 用のすべての AWS リージョンでサポートされています。インスタンスが作成されるとき、Amazon RDS で PostgreSQL DB インスタンスの SSL 証明書が作成されます。SSL 証明書認証を有効にした場合、SSL 証明書には、なりすまし攻撃から保護するために、SSL 証明書の共通名 (CN) として DB インスタンスのエンドポイントが含まれます。

SSL を使用して PostgreSQL DB インスタンスに接続するには

  1. https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem に保存されているパブリックキーをダウンロードします。

  2. オペレーティングシステムに証明書をインポートします。

  3. 接続文字列に「sslmode=verify-full」を追加することで、SSL を使用して PostgreSQL DB インスタンスに接続します。sslmode=verify-full を使用すると、SSL 接続で DB インスタンスのエンドポイントを SSL 証明書のエンドポイントと照合します。

    sslrootcert パラメーターを使用してパブリックキーを参照します (sslrootcert=rds-ssl-ca-cert.pem など)。

PostgreSQL DB インスタンスへの SSL 接続を必須にする

rds.force_ssl パラメーターを使用することで、PostgreSQL DB インスタンスへの接続に SSL の使用を必須にすることができます。デフォルトでは、rds.force_ssl パラメーターが 0 (オフ) に設定されています。rds.force_ssl パラメーターを 1 に設定すれば、DB インスタンスへの接続に SSL を必須にすることができます。rds.force_ssl パラメーターを更新することでも PostgreSQL ssl パラメーターは 1 (オン) に設定され、新しい SSL 接続をサポートするように DB インスタンスの pg_hba.conf ファイルが変更されます。

rds.force_ssl パラメーターの値は、DB インスタンスのパラメータグループを更新することで設定できます。DB インスタンスのパラメータグループがデフォルトのパラメータグループ以外の場合、かつ rds.force_ssl パラメーターを 1 に設定するときにssl パラメーターが既に 1 に設定されている場合は、DB インスタンスを再起動する必要はありません。それ以外の場合は、変更を反映するために DB インスタンスを再起動する必要があります。パラメータグループの詳細については、「DB パラメータグループを使用する」を参照してください。

DB インスタンスの rds.force_ssl パラメーターが 1 に設定されている場合、接続時に、SSL が必須になっていることを示す次のような出力が表示されます。

Copy
$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql (9.3.12, server 9.4.4) WARNING: psql major version 9.3, server major version 9.4. Some psql features might not work. SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>

SSL 接続ステータスを調べる

接続の暗号化ステータスは、DB インスタンスに接続するときにログオンバナーに表示されます。

Copy
Password for user master: psql (9.3.12) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help.   postgres=>

また、sslinfo 拡張機能をロードしてから、show ssl 関数を呼び出して、SSL が使用されているかどうかを調べることもできます。この関数は、この接続が SSL を使用している場合に on を返し、それ以外の場合に off を返します。

Copy
postgres=> create extension sslinfo; CREATE EXTENSION postgres=> show ssl; ssl ---- on (1 row)

SSL 暗号は select ssl_cipher() コマンドを使用して調べることができます。

Copy
postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)

set rds.force_ssl を有効にしてインスタンスを再起動すると、次のメッセージが表示され SSL 以外の接続は拒否されます。

Copy
$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $