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>' [ , ... ] ) ]

The following syntax creates a fork of an existing instance at a point in time. The FORK clause uses point-in-time recovery with the same AT | BEFORE syntax as Time Travel, but creates a full physical copy of the Postgres instance:

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>' [ , ... ] ) ]

必須パラメーター

name

Postgresインスタンスの識別子(名前)を指定します。アカウントに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "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のコスト評価 をご参照ください。

注釈

When you decrease the storage size, you can't set it too close to current disk usage. The new size must be at least 1.4x the disk space currently in use. That way, there's still room to add more data without triggering an automatic storage increase.

AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }

Specifies the authentication method for the instance. POSTGRES indicates that only Postgres user passwords can be used. POSTGRES_OR_SNOWFLAKE also allows the use of short-lived access token passwords. See Snowflake Postgres向けのSnowflakeトークン認証 for more details.

オプションのパラメーター

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)は高可用性をサポートしていません。

デフォルト: FALSE

POSTGRES_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環境」など、インスタンスの目的や所有権を文書化するのに役立ちます。タグとは異なり、コメントは自由形式のテキストであり、整理やコスト追跡には使用されません。

デフォルト:値なし。

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 タグの割り当て をご参照ください。

フォークパラメーター

Snowflake Postgresインスタンスをフォークすると、すべての同じスキーマオブジェクトとテーブルデータを含む同一のコピーが作成されます。フォークされたインスタンスがインスタンスの以前の状態を反映するように、特定の時点を指定することもできます。そうすることで、オブジェクトを誤って削除したなどのデータ整合性の問題から復旧することができます。同じデータで異なるインスタンス構成を試すなど、開発環境やテスト環境でのシナリオを探索することもできます。詳細については、 Snowflake Postgresのポイントインタイムリカバリ をご参照ください。

FORK source_instance

指定されたソースインスタンスのフォーク(コピー)として新しいインスタンスを作成します。

{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )

フォークする時間のポイントを指定します。過去10日よりも前の時点からフォークすることはできません。タイムスタンプまたはオフセットは、Postgresの10日間のデータ保持期間内に該当している必要があります。

AT | BEFORE 句は、次のいずれかのパラメーターを受け付けます。

TIMESTAMP => timestamp

Time Travelに使用する正確な日付と時刻を指定します。値は明示的に TIMESTAMP、 TIMESTAMP_LTZ、 TIMESTAMP_NTZ、または TIMESTAMP_TZ にキャストする必要があります。

OFFSET => time_difference

現在の時刻との差を秒単位で``-N``の形式で指定します。N``は整数または算術式にすることができます(例:-120``は120秒、``-30*60``は30分)。

デフォルト:現在の時刻を使用します。

フォークを作成する場合、次のパラメーターはオプションであり、デフォルトでソースインスタンスの値になります。

  • COMPUTE_FAMILY

  • STORAGE_SIZE_GB

  • HIGH_AVAILABILITY

  • POSTGRES_SETTINGS

出力

新しいインスタンスを作成すると、コマンドは以下の列を持つ1行を返します。

説明

status

作成操作のステータス。

host

インスタンスに接続するためのホスト名。

access_roles

``snowflake_admin``および``application``ロールのユーザー名とパスワード。

default_database

インスタンスのデフォルトのデータベース。

重要

``access_roles``列には、後で取得できない認証情報が含まれています。これらの詳細は安全な場所に保存してください。

フォークを作成すると、コマンドは``status``および``host``列のみを持つ1行を返します。フォークは、フォークが対応する時点でソースインスタンスが持っていたのと同じ認証情報を使用します。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE POSTGRES INSTANCE

アカウント

デフォルトでは、ACCOUNTADMINロールのみがこの権限を持っています。

USAGE

ネットワークポリシー

NETWORK_POLICYを指定する場合にのみ必要です。

USAGE

ストレージ統合

STORAGE_INTEGRATIONを指定する場合にのみ必要です。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • 新しいインスタンスの作成は完了するまでに時間がかかります。インスタンスの構築中は、現在の:ref:`状態<instance-states>`が表示されます。DESCPOSTGRESINSTANCEコマンドを使用して、インスタンスのセットアップ中にステータスを追跡できます。

  • フォークを作成する際には、認証情報を指定したり表示したりすることはできません。これは、フォークが対応する時点で、ソースインスタンスが持っていたのと同じ認証情報を使用するためです。元のインスタンスとは異なるユーザーにアクセスを提供する必要がある場合は、後でフォークされたインスタンスの認証情報を再生成できます。

  • The time needed to create a fork depends on the amount of data in the source instance. Larger databases with more data take longer to fork. The compute family (instance size) of the source doesn't significantly affect fork duration.

  • フォークは、バックアップと先行書き込みログ(WAL)の再生を使用して完全なデータコピーを実行します。つまり、フォークされたインスタンスは完全に別のものです。ソースインスタンスをドロップしても、そこから作成したフォークには影響しません。

    注釈

    Postgres forking isn't part of the Snowflake Time Travel feature, which uses zero-copy technology for tables. However, forking uses the same AT | BEFORE syntax to specify a point in time.

  • メタデータについて:

    注意

    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';