CREATE POSTGRES INSTANCE¶
新しい:doc:`Snowflake Postgresインスタンス</user-guide/snowflake-postgres/about>`を作成するか、既存のインスタンスのフォークを作成します。
フォークすると、:doc:`ポイントインタイムリカバリ(PITR)</user-guide/snowflake-postgres/postgres-point-in-time-recovery>`を使用して、特定の時点でインスタンスの**完全な独立したコピー**が作成されます。これは、実稼働データからの復旧、テスト、または開発環境の作成に役立ちます。
- こちらもご参照ください。
ALTER POSTGRES INSTANCE、 DESCRIBE POSTGRES INSTANCE、 DROP POSTGRES INSTANCE、 SHOW POSTGRES INSTANCES
構文¶
CREATE POSTGRES INSTANCE <name>
COMPUTE_FAMILY = '<compute_family>'
STORAGE_SIZE_GB = <storage_gb>
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }
[ POSTGRES_VERSION = { 16 | 17 | 18 } ]
[ NETWORK_POLICY = '<network_policy>' ]
[ HIGH_AVAILABILITY = { TRUE | FALSE } ]
[ STORAGE_INTEGRATION = '<storage_integration_name>' ]
[ POSTGRES_SETTINGS = '<json_string>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
次の構文は、特定の時点における既存のインスタンスのフォークを作成します。FORK句は、:doc:`Time Travel</user-guide/data-time-travel>`と同じAT|BEFORE構文で:doc:`ポイントインタイムリカバリ</user-guide/snowflake-postgres/postgres-point-in-time-recovery>`を使用しますが、Postgresインスタンスの完全な物理コピーを作成します。
CREATE POSTGRES INSTANCE <name>
FORK <source_instance>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> } ) ]
[ COMPUTE_FAMILY = '<compute_family>' ]
[ STORAGE_SIZE_GB = <storage_gb> ]
[ HIGH_AVAILABILITY = { TRUE | FALSE } ]
[ POSTGRES_SETTINGS = '<json_string>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
必須パラメーター¶
namePostgresインスタンスの識別子(名前)を指定します。アカウントに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
COMPUTE_FAMILY = 'compute_family'Postgresインスタンスの:doc:`インスタンスサイズ</user-guide/snowflake-postgres/postgres-instance-sizes>`を指定します。
Snowflake Postgresには、次の3つのティアが用意されています。
**バースト可能**(BURST_XS、BURST_S、BURST_M):開発と断続的なワークロードに適したコスト効率。100GBストレージに限定されており、高可用性はサポートしていません。
**標準**(STANDARD_MからSTANDARD_24XLまで):汎用ワークロード用のバランスの取れたCPUとメモリ。高可用性を含むすべての機能をサポートします。
**メモリ最適化**(HIGHMEM_LからHIGHMEM_48XLまで):メモリ負荷の高いクエリと大きなインデックスのための、より高いメモリ対CPU比率。高可用性を含むすべての機能をサポートします。
注釈
一部の機能には、特定のコンピューティングファミリーが必要です。例えば、高可用性(
HIGH_AVAILABILITY = TRUE)はSTANDARDおよびHIGHMEMインスタンスでのみ使用でき、BURSTインスタンスでは使用できません。STORAGE_SIZE_GB = storage_gbストレージサイズをGB単位で指定します。10~65,535の間である必要があります。
ストレージは、割り当てられた量に基づいて、コンピューティングとは別に請求されます。ALTERPOSTGRESINSTANCEを使用して、後でストレージサイズを増減できます。コストの詳細については、 Snowflake Postgresのコスト評価 をご参照ください。
注釈
ストレージサイズを縮小する際、インスタンスのデータ量に近すぎる値まで小さくすることはできません。新しいサイズは、インスタンスが現在使用しているディスク使用量の少なくとも1.4倍である必要があります。これにより、ストレージの自動拡張をトリガーせずにデータを追加する余地が確保されます。
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }インスタンスの認証方法を指定します。POSTGRESは、Postgres使用パスワードのみが使用できることを示します。POSTGRES_OR_SNOWFLAKEは、短期間有効なアクセストークンパスワードの使用も許可します。詳細については、 Snowflake Postgres向けのSnowflakeトークン認証 をご参照ください。
オプションのパラメーター¶
POSTGRES_VERSION = { 16 | 17 | 18 }使用するPostgresのメジャーバージョンを指定します。
最新バージョンには新機能と改善が含まれていますが、アプリケーションの互換性や既存のインスタンスと一致させるために以前のバージョンを選択することもできます。ALTERPOSTGRESINSTANCEを使用して、後で新しいバージョンにアップグレードできます。
デフォルト:Postgresの最新バージョン。
NETWORK_POLICY = 'network_policy'インスタンスに使用する ネットワークポリシー を指定します。このパラメーターを指定するには、ネットワークポリシーオブジェクトに対するUSAGE権限が付与されている必要があります。
デフォルト:ネットワークポリシーは適用されていません。
重要
ネットワークポリシーがないと、インスタンスは受信接続を受け入れることはできません。SHOWおよびDESCRIBEコマンドを使用して引き続きインスタンスを表示できますが、ALTERPOSTGRESINSTANCEを使用してネットワークポリシーをアタッチするまでPostgresデータベースに接続することはできません。
STORAGE_INTEGRATION = 'storage_integration_name'``POSTGRES_EXTERNAL_STORAGE``タイプのストレージ統合をPostgresインスタンスにアタッチし、pg_lake拡張機能が外部オブジェクトストレージのデータにアクセスできるようにします。完全なセットアップ手順については、:doc:`/user-guide/snowflake-postgres/postgres-pg_lake`をご参照ください。
:doc:`alter-postgres-instance`を使用して、後でストレージ統合をアタッチまたは削除することもできます。
デフォルト:ストレージ統合はアタッチされていません。
HIGH_AVAILABILITY = { TRUE | FALSE }インスタンスの:doc:`高可用性</user-guide/snowflake-postgres/high-availability>`を有効にするかどうかを指定します。
高可用性は、自動フェールオーバーのために別の可用性ゾーンにスタンバイインスタンスをプロビジョニングします。これにより、プライマリが使用できなくなった場合のダウンタイムが最小限に抑えられます。HAがない場合、復旧にはバックアップからの復元が必要で、大規模なインスタンスやアクティブなインスタンスの場合は数時間かかることがあります。後でALTERPOSTGRESINSTANCEを使用してHAを有効または無効にするには、:doc:`メンテナンス操作</user-guide/snowflake-postgres/managing-instances>`が必要になることに注意してください。
重要
バースト可能なインスタンスサイズ(BURST_XS、BURST_S、BURST_M)は高可用性をサポートしていません。
デフォルト:
FALSEPOSTGRES_SETTINGS = 'json_string'インスタンスのカスタム:doc:`Postgresサーバー設定</user-guide/snowflake-postgres/postgres-server-settings>`をJSON形式で指定します。
'{"component:name" = "value", ...}'形式は``component:name``を使用します。``component``は``postgres``(PostgreSQLサーバー設定用)または``pgbouncer``(接続プーラー設定用)のいずれかです。例:
'{"postgres:work_mem" = "128MB", "pgbouncer:default_pool_size" = "200"}'利用可能な設定については、:doc:`/user-guide/snowflake-postgres/postgres-server-settings`をご参照ください。
デフォルト:カスタムPostgres構成パラメーターは設定されていません。
COMMENT = 'string_literal'Postgresインスタンスのコメントを指定します。
コメントは、「請求サービスのプロダクションインスタンス」や「チームXのQA環境」など、インスタンスの目的や所有権を文書化するのに役立ちます。タグとは異なり、コメントは自由形式のテキストであり、整理やコスト追跡には使用されません。
デフォルト:値なし。
フォークパラメーター¶
Snowflake Postgresインスタンスをフォークすると、すべての同じスキーマオブジェクトとテーブルデータを含む同一のコピーが作成されます。フォークされたインスタンスがインスタンスの以前の状態を反映するように、特定の時点を指定することもできます。そうすることで、オブジェクトを誤って削除したなどのデータ整合性の問題から復旧することができます。同じデータで異なるインスタンス構成を試すなど、開発環境やテスト環境でのシナリオを探索することもできます。詳細については、 Snowflake Postgresのポイントインタイムリカバリ をご参照ください。
FORK source_instance指定されたソースインスタンスのフォーク(コピー)として新しいインスタンスを作成します。
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )フォークする時間のポイントを指定します。過去10日よりも前の時点からフォークすることはできません。タイムスタンプまたはオフセットは、Postgresの10日間のデータ保持期間内に該当している必要があります。
AT | BEFORE 句は、次のいずれかのパラメーターを受け付けます。
TIMESTAMP => timestampTime Travelに使用する正確な日付と時刻を指定します。値は明示的に TIMESTAMP、 TIMESTAMP_LTZ、 TIMESTAMP_NTZ、または TIMESTAMP_TZ にキャストする必要があります。
OFFSET => time_difference現在の時刻との差を秒単位で``-N``の形式で指定します。
N``は整数または算術式にすることができます(例:-120``は120秒、``-30*60``は30分)。
デフォルト:現在の時刻を使用します。
フォークを作成する場合、次のパラメーターはオプションであり、デフォルトでソースインスタンスの値になります。
COMPUTE_FAMILYSTORAGE_SIZE_GBHIGH_AVAILABILITYPOSTGRES_SETTINGS
出力¶
新しいインスタンスを作成すると、コマンドは以下の列を持つ1行を返します。
列 |
説明 |
|---|---|
|
作成操作のステータス。 |
|
インスタンスに接続するためのホスト名。 |
|
``snowflake_admin``および``application``ロールのユーザー名とパスワード。 |
|
インスタンスのデフォルトのデータベース。 |
重要
``access_roles``列には、後で取得できない認証情報が含まれています。これらの詳細は安全な場所に保存してください。
フォークを作成すると、コマンドは``status``および``host``列のみを持つ1行を返します。フォークは、フォークが対応する時点でソースインスタンスが持っていたのと同じ認証情報を使用します。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
|---|---|---|
CREATE POSTGRES INSTANCE |
アカウント |
デフォルトでは、ACCOUNTADMINロールのみがこの権限を持っています。 |
USAGE |
ネットワークポリシー |
NETWORK_POLICYを指定する場合にのみ必要です。 |
USAGE |
ストレージ統合 |
STORAGE_INTEGRATIONを指定する場合にのみ必要です。 |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
新しいインスタンスの作成は完了するまでに時間がかかります。インスタンスの構築中は、現在の:ref:`状態<instance-states>`が表示されます。DESCPOSTGRESINSTANCEコマンドを使用して、インスタンスのセットアップ中にステータスを追跡できます。
フォークを作成する際には、認証情報を指定したり表示したりすることはできません。これは、フォークが対応する時点で、ソースインスタンスが持っていたのと同じ認証情報を使用するためです。元のインスタンスとは異なるユーザーにアクセスを提供する必要がある場合は、後でフォークされたインスタンスの認証情報を再生成できます。
フォークの作成に必要な時間は、ソースインスタンスのデータ量に応じて異なります。より多くのデータを持つ大規模なデータベースの場合は、フォークに時間がかかります。ソースのコンピューティングファミリー(インスタンスサイズ)は、フォーク時間には大きく影響しません。
フォークは、バックアップと先行書き込みログ(WAL)の再生を使用して完全なデータコピーを実行します。つまり、フォークされたインスタンスは完全に別のものです。ソースインスタンスをドロップしても、そこから作成したフォークには影響しません。
注釈
Postgresフォークは、テーブルにゼロコピーテクノロジーを使用するSnowflake:doc:`Time Travel</user-guide/data-time-travel>`機能の一部ではありません。ただし、フォークは時点を指定するために同じAT|BEFORE構文を使用します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
基本的なPostgresインスタンスを作成します。
CREATE POSTGRES INSTANCE my_postgres
COMPUTE_FAMILY = 'STANDARD_S'
STORAGE_SIZE_GB = 50
AUTHENTICATION_AUTHORITY = POSTGRES;
高可用性とネットワークポリシーを持つPostgresインスタンスを作成します。
CREATE POSTGRES INSTANCE prod_postgres
COMPUTE_FAMILY = 'STANDARD_M'
STORAGE_SIZE_GB = 500
AUTHENTICATION_AUTHORITY = POSTGRES
POSTGRES_VERSION = 17
HIGH_AVAILABILITY = TRUE
NETWORK_POLICY = 'my_network_policy'
COMMENT = 'Production Postgres instance';
インスタンスを作成し、後でネットワークポリシーを構成します。
-- Step 1: Create instance without network policy
CREATE POSTGRES INSTANCE my_postgres
COMPUTE_FAMILY = 'STANDARD_S'
STORAGE_SIZE_GB = 50
AUTHENTICATION_AUTHORITY = POSTGRES;
-- Step 2: Monitor instance creation
DESCRIBE POSTGRES INSTANCE my_postgres
->> SELECT "property", "value"
FROM $1
WHERE "property" IN ('name', 'state', 'host');
-- Step 3: Once READY, attach network policy to enable connections
ALTER POSTGRES INSTANCE my_postgres
SET NETWORK_POLICY = 'my_network_policy';
-- Step 4: Now you can connect to the Postgres database using the host and credentials
-- from the CREATE output
既存のインスタンスのフォークを作成します。
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance;
特定の時点でフォークを作成します。
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (TIMESTAMP => '2025-01-15 12:00:00'::TIMESTAMP_NTZ);
異なるインスタンスサイズで2時間前からのフォークを作成します。
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (OFFSET => -7200)
COMPUTE_FAMILY = 'STANDARD_L';
より大きなインスタンスサイズと異なるストレージでレポート用のフォークを作成します。
-- Fork production instance for reporting workload
CREATE POSTGRES INSTANCE reporting_instance
FORK prod_instance
COMPUTE_FAMILY = 'HIGHMEM_XL'
STORAGE_SIZE_GB = 500
COMMENT = 'Dedicated reporting instance to offload analytics queries';
日常テストのため午前0時UTCでフォークを作成します。
-- Fork at start of day (midnight UTC)
CREATE POSTGRES INSTANCE daily_test_instance
FORK prod_instance
AT (TIMESTAMP => '2026-02-05 00:00:00'::TIMESTAMP_NTZ);
コスト削減のためにHAを無効にした開発フォークを作成します。
CREATE POSTGRES INSTANCE dev_instance
FORK prod_instance
COMPUTE_FAMILY = 'STANDARD_S'
STORAGE_SIZE_GB = 100
HIGH_AVAILABILITY = FALSE
COMMENT = 'Development environment from prod data';
インシデント前のフォークを使用して、誤ったデータ削除から復旧します。
-- Recover by forking from 30 minutes ago
CREATE POSTGRES INSTANCE recovered_instance
FORK damaged_instance
AT (OFFSET => -1800)
COMMENT = 'Recovery fork from before data deletion';
