Snowflake Postgresのポイントインタイムリカバリ¶
概要¶
Snowflake Postgresは、ポイントインタイムリカバリ( PITR )を使用したインスタンスの フォーク の作成をサポートしています。フォークは、特定の時刻の既存のインスタンスの状態を反映する新しいインスタンスです。 フォークはSnowflakeでの CLONE 操作に似ています。ただし、 CLONE 操作と異なり、フォークは元のデータすべての完全コピーを実行します。
フォークは元のインスタンスから隔離されているため、フォーク(スキーマまたはデータ)に加えた変更は元のインスタンスに影響しません。
ポイントインタイムリカバリは、次の必要がある場合に役立ちます。
テーブルの削除や失敗したデータ更新など、 偶発的な変更から回復させる 。
デバッグや監査のために、 データの過去の状態を調べる 。
元のインスタンスに影響を与えることなく、実稼働データの本物のコピーに対して アプリケーションの変更をテストする 。
フォークは、指定された時間より前に存在した元のインスタンスの最新のベースバックアップから作成されます。元のインスタンスの先行書き込みログ( WAL )記録は、選択した時点まで再生されるので、フォークされたインスタンスはその時点での元のインスタンスとトランザクション的に一致します。
フォークにコピーされるもの¶
フォークを作成すると、元のインスタンスから次の特性がコピーされます。
Postgresバージョン。バイナリ互換性のためにバージョンがコピーされます。
高可用性設定の設定(有効または無効)。
インスタンスにアクセスするための認証情報。
作成中、 ストレージ や インスタンスサイズ(プラン) など、新しいインスタンスの一部のプロパティをカスタマイズできます。フォークの価格設定は、他のインスタンスと同様に、フォークの構成(プラン、ストレージ、高可用性)に基づいています。
フォークの作成¶
元のインスタンスのフォークとしてPostgresインスタンスを作成するには、 CREATE POSTGRES INSTANCE コマンドを実行し、 FORK 句を指定します。コマンドは、 AT または BEFORE 句によって指定されたポイントの元のインスタンスからフォークを作成します。この句を省略すると、フォークは、現時点における元のインスタンスに基づいて作成されます。
CREATE POSTGRES INSTANCE <name>
FORK <orig_name>
[ { 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>' [ , ... ] ) ]
コマンドパラメーターの場合:
FORK orig_nameフォークの基点を指定します。
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )フォークする時間のポイントを指定します。 タイムスタンプまたはオフセットは、Postgresの10日間のデータ保持時間内に該当している必要があります。
デフォルト: 現在の時刻を使用します。
AT | BEFORE 句は、次のいずれかのパラメーターを受け付けます。
TIMESTAMP => timestampTime Travelに使用する正確な日付と時刻を指定します。値は明示的に TIMESTAMP、 TIMESTAMP_LTZ、 TIMESTAMP_NTZ、または TIMESTAMP_TZ にキャストする必要があります。
明示的なキャストが指定されていない場合、 AT 句のタイムスタンプは、 UTC のタイムゾーン (TIMESTAMP_NTZと同等)のタイムスタンプとして扱われます。明示的なキャストで TIMESTAMP データ型を使用すると、値が TIMESTAMP_NTZ 値として扱われる場合があります。詳細については、 日付と時刻のデータ型 をご参照ください。
OFFSET => time_differenceTime Travelに使用する現在の時刻との差を秒単位で
-Nの形式で指定します。Nは整数または数式です(例:-120は120秒、-30*60は1800秒または30分)。
デフォルト: 元のインスタンスからコピーされます。
COMPUTE_FAMILY = compute_familySnowflake Postgresインスタンスサイズ テーブルからインスタンスサイズの名前を指定します。
デフォルト: 元のインスタンスからコピーされます。
STORAGE_SIZE_GB = storage_gbストレージサイズを指定します( GB 単位)。10~65,535の間である必要があります。
デフォルト: 元のインスタンスからコピーされます。
HIGH_AVAILABILITY = { TRUE | FALSE }フォークに使用する高可用性設定を指定します。
デフォルト: 元のインスタンスからコピーされます。
POSTGRES_SETTINGS = 'json_string'オプションで、 JSON 形式でインスタンスのPostgres構成パラメーターを設定できます。 利用可能なPostgresパラメーターのリストについては、 Snowflake Postgresのサーバー設定 をご参照ください。
'{"component:name" = "value", ...}'デフォルト: 元のインスタンスからコピーされます。
COMMENT = 'string_literal'ユーザーのコメントを指定します。
デフォルト:
NULL
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 Tag quotas をご参照ください。
次の列を持つ1行が返されます。
statushost
CREATE FORK SQL の例
タイムスタンプ
2025-01-01 12:00:00の元のインスタンスmy_origin_instanceからフォークmy_forkを作成します。CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance AT (TIMESTAMP => '2025-01-01 12:00:00');
120秒前の元のインスタンスmy_origin_instanceからフォークmy_forkを作成します。CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance AT (OFFSET => -120);現時点の元のインスタンス
my_origin_instanceからフォークmy_forkを作成します。STANDARD_Mインスタンスサイズを使用し、高可用性はありません。CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance COMPUTE_FAMILY = STANDARD_M HIGH_AVAILABILITY = FALSE;
フォークを作成する時、認証情報は表示されません。 フォークの認証情報は、元のインスタンスと同じです。 必要に応じて、後で認証情報を再生成できます。
フォークの作成に必要な時間は、元のインスタンスのサイズによって異なります。
