Recuperação pontual do Snowflake Postgres¶
Visão geral¶
O Snowflake Postgres oferece suporte à criação de bifurcações de uma instância usando a recuperação pontual (Point-In-Time Recovery, PITR). Uma bifurcação é uma nova instância que reflete o estado de uma instância existente em um momento específico. A bifurcação é semelhante à operação CLONE no Snowflake. Entretanto, ao contrário da operação CLONE, a bifurcação realiza uma cópia completa de todos os dados de origem.
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 } )Especifica o ponto no tempo do qual bifurcar. O carimbo de data/hora ou o deslocamento deve estar dentro do tempo de retenção de dados de 10 dias do Postgres.
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'Permite que você defina opcionalmente os parâmetros de configuração do Postgres em sua instância no formato JSON. Consulte Configurações do servidor Snowflake Postgres para obter uma lista de parâmetros do Postgres disponíveis.
'{"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 Tag quotas.
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;
Quando você cria uma bifurcação, nenhuma credencial é exibida. As credenciais para a bifurcação são as mesmas da instância de origem. Você pode gerar novamente as credenciais no futuro, se necessário.
O tempo necessário para criar uma bifurcação depende do tamanho da instância de origem.
