Recuperação pontual do Snowflake Postgres¶
Visão geral¶
Snowflake Postgres supports creating forks of an instance using point-in-time recovery (PITR). A fork is a new instance that reflects the state of an existing instance at a specific time. A fork is similar to a CLONE operation in Snowflake. However, unlike the CLONE operation, a fork performs a full copy of all of the origin data.
Como uma bifurcação é isolada da instância de origem, as alterações que você fizer na bifurcação (esquema ou dados) não afetam a instância de origem.
A recuperação pontual é útil quando você precisa:
Recuperar alterações acidentais, como tabelas descartadas ou atualizações de dados incorretas;
Inspecionar o estado histórico dos dados para depuração ou auditoria;
Testar as alterações no aplicativo em relação a uma cópia realista dos dados de produção sem afetar a instância de origem.
As bifurcações são criadas do backup de base mais recente da instância de origem que existe antes de um horário especificado. Os registros de log write-ahead (Write-Ahead Log, WAL) da instância de origem são repetidos até o ponto selecionado no tempo para que a instância bifurcada seja consistente em termos de transação com a instância de origem naquele momento no tempo.
O que é copiado para a bifurcação¶
Quando você cria uma bifurcação, as seguintes características são copiadas da instância de origem:
A versão do Postgres. A versão é copiada para compatibilidade binária.
A configuração de alta disponibilidade (habilitada ou desabilitada).
Credenciais para acessar a instância.
Você pode personalizar algumas propriedades para a nova instância durante a criação, como armazenamento e tamanho da instância (plano). A precificação da bifurcação é baseada na configuração dela (plano, armazenamento e alta disponibilidade), como com qualquer outra instância.
Criando uma bifurcação¶
Para criar uma instância Postgres como bifurcação de uma instância de origem, execute o comando CREATE POSTGRES INSTANCE e especifique a cláusula FORK. O comando cria a bifurcação da instância de origem no ponto no tempo especificado pela cláusula AT ou BEFORE. Se você omitir essa cláusula, a bifurcação será baseada na instância de origem no ponto no tempo atual.
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>' [ , ... ] ) ]
Para os parâmetros do comando:
FORK orig_nameEspecifica a origem da bifurcação.
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )Specifies the point in time to fork from. The timestamp or offset must fall within the 10 day postgres data retention time.
Padrão: sem valor. Utiliza a hora atual.
A cláusula AT | BEFORE aceita um dos seguintes parâmetros:
TIMESTAMP => timestampEspecifica uma data e hora exatas a serem usadas para o Time Travel. O valor deve ser explicitamente convertido para um tipo de dados TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ.
Se nenhuma conversão explícita for especificada, o carimbo de data/hora na cláusula AT será tratado como um carimbo de data/hora com o fuso horário UTC (equivalente a TIMESTAMP_NTZ). Usar o tipo de dados TIMESTAMP para uma conversão explícita também pode fazer com que o valor seja tratado como um valor TIMESTAMP_NTZ. Para obter mais detalhes, consulte Tipos de dados de data e hora.
OFFSET => time_differenceEspecifica a diferença em segundos do tempo atual a ser usado para o Time Travel, na forma
-NondeNpode ser uma expressão inteira ou aritmética (por exemplo,-120é 120 segundos,-30*60é 1800 segundos ou 30 minutos).
Padrão: sem valor. Copiado da origem.
COMPUTE_FAMILY = compute_familyEspecifica o nome de um tamanho de instância das tabelas Tamanhos de instância do Snowflake Postgres.
Padrão: sem valor. Copiado da origem.
STORAGE_SIZE_GB = storage_gbEspecifica o tamanho do armazenamento em GB. Deve ser entre 10 e 65.535.
Padrão: sem valor. Copiado da origem.
HIGH_AVAILABILITY = { TRUE | FALSE }Especifica a configuração de alta disponibilidade a ser usada para a bifurcação.
Padrão: sem valor. Copiado da origem.
POSTGRES_SETTINGS = 'json_string'Allows you to optionally set Postgres configuration parameters on your instance in JSON format. See Configurações do servidor Snowflake Postgres for a list of available Postgres parameters.
'{"component:name" = "value", ...}'Padrão: sem valor. Copiado da origem.
COMMENT = 'string_literal'Especifica um comentário para o usuário.
Padrão:
NULL
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )Especifica o nome da tag e o valor da cadeia de caracteres dela.
O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.
Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags.
Uma linha com as seguintes colunas será retornada:
statushost
Exemplos de CREATE FORK SQL
Crie uma bifurcação
my_forkda instância de origemmy_origin_instanceno carimbo de data/hora2025-01-01 12:00:00.CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance AT (TIMESTAMP => '2025-01-01 12:00:00');Crie uma bifurcação
my_forkda instância de origemmy_origin_instancecomo ela era120segundos atrás.CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance AT (OFFSET => -120);Crie uma bifurcação
my_forkda instância de origemmy_origin_instancea partir da hora atual, usando o tamanho da instânciaSTANDARD_Me sem alta disponibilidade.CREATE POSTGRES INSTANCE my_fork FORK my_origin_instance COMPUTE_FAMILY = STANDARD_M HIGH_AVAILABILITY = FALSE;
When you create a fork, no credentials will be displayed. Credentials for the fork are the same as the origin instance. You can regenerate credentials later if needed.
O tempo necessário para criar uma bifurcação depende do tamanho da instância de origem.
