CREATE POSTGRES INSTANCE¶
Cria uma nova instância do Snowflake Postgres ou cria uma bifurcação de uma instância existente.
A bifurcação cria uma cópia completa e independente de uma instância em um ponto específico no tempo usando a recuperação pontual (Point-In-Time Recovery, PITR). Isso é útil para recuperação, teste ou criação de ambientes de desenvolvimento dos dados de produção.
- Consulte também:
ALTER POSTGRES INSTANCE, DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE, SHOW POSTGRES INSTANCES
Sintaxe¶
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>' [ , ... ] ) ]
A sintaxe a seguir cria uma bifurcação de uma instância existente em um determinado momento. A cláusula FORK usa a recuperação pontual com a mesma sintaxe AT | BEFORE do Time Travel, mas cria uma cópia física completa da instância do 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>' [ , ... ] ) ]
Parâmetros obrigatórios¶
nameEspecifica o identificador (nome) para a instância do Postgres, que deve ser exclusivo na conta.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo,
"My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais informações, consulte Requisitos para identificadores.
COMPUTE_FAMILY = 'compute_family'Especifica o tamanho da instância do Postgres.
O Snowflake Postgres oferece três camadas:
Com capacidade de intermitência (BURST_XS, BURST_S, BURST_M): custo-benefício ideal para desenvolvimento e cargas de trabalho intermitentes. Limitado a armazenamento de 100GB e não oferece suporte à alta disponibilidade.
Padrão (STANDARD_M por STANDARD_24XL): CPU e memória balanceadas para cargas de trabalho de uso geral. Oferece suporte a todos os recursos, inclusive alta disponibilidade.
Otimizado para memória (HIGHMEM_L por HIGHMEM_48XL): proporção maior entre memória e CPU para consultas com uso intensivo de memória e índices grandes. Oferece suporte a todos os recursos, inclusive alta disponibilidade.
Nota
Alguns recursos exigem famílias de computação específicas. Por exemplo, a alta disponibilidade (
HIGH_AVAILABILITY = TRUE) está disponível apenas em instâncias STANDARD e HIGHMEM, não em instâncias BURST.STORAGE_SIZE_GB = storage_gbEspecifica o tamanho do armazenamento em GB. Deve ser entre 10 e 65.535.
O armazenamento é cobrado separadamente da computação de acordo com a quantidade alocada. Você pode aumentar ou diminuir o tamanho do armazenamento no futuro usando ALTER POSTGRES INSTANCE. Para obter mais informações sobre custos, consulte Avaliação de custos do Snowflake Postgres.
Nota
Ao diminuir o tamanho do armazenamento, você não pode reduzir a quantidade muito próxima da quantidade de dados na instância. O novo tamanho deve ser pelo menos 1,4 vez a quantidade de uso de disco que a instância está usando atualmente. Dessa forma, ainda há espaço para adicionar mais dados sem acionar um aumento automático de armazenamento.
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }Especifica o método de autenticação para a instância. POSTGRES indica que somente senhas de uso do Postgres podem ser utilizadas. POSTGRES_OR_SNOWFLAKE também permite o uso de senhas de token de acesso de curta duração. Consulte Autenticação de token Snowflake para Snowflake Postgres para obter mais detalhes.
Parâmetros opcionais¶
POSTGRES_VERSION = { 16 | 17 | 18 }Especifica a versão principal do Postgres a ser usada.
A versão mais recente inclui novos recursos e melhorias, mas você pode escolher uma versão anterior para compatibilidade com aplicativos ou para corresponder a instâncias existentes. Você pode atualizar para uma versão mais recente usando ALTER POSTGRES INSTANCE.
Padrão: sem valor. A versão mais recente do Postgres.
NETWORK_POLICY = 'network_policy'Especifica a política de redes a ser usada para a instância. Para especificar esse parâmetro, você deve ter recebido o privilégio USAGE no objeto de política de redes.
Padrão: sem valor. Nenhuma política de redes é aplicada.
Importante
Sem uma política de redes, a instância não pode aceitar conexões de entrada. Você ainda pode visualizar a instância usando os comandos SHOW e DESCRIBE, mas não pode se conectar ao banco de dados Postgres até anexar uma política de redes usando ALTER POSTGRES INSTANCE.
STORAGE_INTEGRATION = 'storage_integration_name'Anexa uma integração de armazenamento do tipo
POSTGRES_EXTERNAL_STORAGEà instância do Postgres, permitindo que a extensão pg_lake acesse os dados no armazenamento de objetos externo. Para o procedimento de configuração completo, consulte Configurando o armazenamento S3 para pg_lake.Você também pode anexar ou remover uma integração de armazenamento mais tarde usando ALTER POSTGRES INSTANCE.
Padrão: sem valor. Nenhuma integração de armazenamento foi anexada.
HIGH_AVAILABILITY = { TRUE | FALSE }Especifica se a alta disponibilidade deve ser habilitada para a instância.
A alta disponibilidade provisiona uma instância de espera em uma zona de disponibilidade separada para failover automático. Isso minimiza o tempo de inatividade se a instância primária ficar indisponível. Sem HA, a recuperação requer a restauração de um backup, o que pode levar horas para instâncias grandes ou ativas. Observe que habilitar ou desabilitar a HA mais tarde usando ALTER POSTGRES INSTANCE requer uma operação de manutenção.
Importante
Os tamanhos de instância com capacidade de intermitência (BURST_XS, BURST_S, BURST_M) não são compatíveis com alta disponibilidade.
Padrão:
FALSEPOSTGRES_SETTINGS = 'json_string'Especifica configurações personalizadas do servidor Postgres para a instância no formato JSON:
'{"component:name" = "value", ...}'O formato usa
component:name, em quecomponentépostgres(para configurações do servidor PostgreSQL) oupgbouncer(para configurações do pool de conexões). Por exemplo:'{"postgres:work_mem" = "128MB", "pgbouncer:default_pool_size" = "200"}'Consulte Configurações do servidor Snowflake Postgres para ver as configurações disponíveis.
Padrão: sem valor. Nenhum parâmetro de configuração personalizado do Postgres é definido.
COMMENT = 'string_literal'Especifica um comentário para a instância do Postgres.
Os comentários são úteis para documentar a finalidade ou a propriedade de uma instância, como «Instância de produção para serviço de faturamento» ou «Ambiente de QA para a equipe X». Ao contrário das tags, os comentários são textos de forma livre e não são usados para organização ou rastreamento de custos.
Padrão: sem valor.
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.
Parâmetros de bifurcação¶
A bifurcação de uma instância do Snowflake Postgres cria uma cópia idêntica com todos os mesmos objetos de esquema e dados de tabela. Você também pode especificar um ponto no tempo para que a instância bifurcada reflita um estado anterior da instância. Dessa forma, você pode se recuperar de problemas de integridade de dados, como descarte acidental de objetos. Você também pode explorar cenários em um ambiente de desenvolvimento e teste, como tentar configurações de instância diferentes com dados idênticos. Para obter mais informações, consulte Recuperação pontual do Snowflake Postgres.
FORK source_instanceCria uma nova instância como uma bifurcação (cópia) da instância de origem especificada.
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )Especifica o ponto no tempo do qual bifurcar. Não é possível bifurcar de um ponto no tempo com mais de 10 dias no passado. O carimbo de data/hora ou o deslocamento deve estar dentro do período de retenção de dados de 10 dias do Postgres.
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.
OFFSET => time_differenceEspecifica a diferença em segundos em relação à hora atual, no formato
-N, em queNpode ser um número inteiro ou uma expressão aritmética (por exemplo,-120é 120 segundos,``-30*60`` é 30 minutos).
Padrão: sem valor. Utiliza a hora atual.
Ao criar uma bifurcação, os seguintes parâmetros são opcionais e usam como padrão os valores da instância de origem:
COMPUTE_FAMILYSTORAGE_SIZE_GBHIGH_AVAILABILITYPOSTGRES_SETTINGS
Saída¶
Quando você cria uma nova instância, o comando retorna uma linha com as seguintes colunas:
Coluna |
Descrição |
|---|---|
|
Status da operação de criação. |
|
Nome de host para conexão com a instância. |
|
Nomes de usuário e senhas para as funções |
|
Banco de dados padrão para a instância. |
Importante
A coluna access_roles contém credenciais que você não poderá recuperar mais tarde. Salve esses detalhes em um local seguro.
Quando você cria uma bifurcação, o comando retorna uma linha apenas com as colunas status e host. A bifurcação usa as mesmas credenciais que a instância de origem tinha no ponto no tempo ao qual a bifurcação corresponde.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
|---|---|---|
CREATE POSTGRES INSTANCE |
Conta |
Por padrão, somente a função ACCOUNTADMIN tem este privilégio. |
USAGE |
Política de redes |
Obrigatório somente se especificar uma NETWORK_POLICY. |
USAGE |
Integração de armazenamento |
Obrigatório somente se especificar uma STORAGE_INTEGRATION. |
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
A criação de uma nova instância leva algum tempo para ser concluída. A instância exibe o estado atual enquanto ela está sendo criada. Você pode usar o comando DESC POSTGRES INSTANCE para rastrear o status durante a configuração da instância.
Ao criar uma bifurcação, você não especifica ou vê as credenciais. Isso porque a bifurcação usa as mesmas credenciais que a instância de origem tinha no ponto no tempo ao qual a bifurcação corresponde. Você pode gerar novamente as credenciais para a instância bifurcada, se precisar conceder acesso a um conjunto de usuários diferente daquele na instância original.
O tempo necessário para criar uma bifurcação depende da quantidade de dados na instância de origem. Bancos de dados maiores com mais dados levam mais tempo para serem bifurcados. A família de computação (tamanho da instância) da fonte não afeta significativamente a duração da bifurcação.
A bifurcação executa uma cópia completa dos dados usando a reprodução de backup e de log write-ahead (Write-Ahead Log, WAL), o que significa que a instância bifurcada é totalmente separada: o descarte da instância de origem não afeta nenhuma bifurcação que você tenha criado a partir dela.
Nota
A bifurcação do Postgres não faz parte do recurso Snowflake Time Travel, que usa a tecnologia de cópia zero para tabelas. Entretanto, a bifurcação usa a mesma sintaxe AT | BEFORE para especificar um ponto no tempo.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Exemplos¶
Criar uma instância básica do Postgres:
CREATE POSTGRES INSTANCE my_postgres
COMPUTE_FAMILY = 'STANDARD_S'
STORAGE_SIZE_GB = 50
AUTHENTICATION_AUTHORITY = POSTGRES;
Criar uma instância do Postgres com alta disponibilidade e uma política de redes:
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';
Criar uma instância e configurar uma política de redes mais tarde:
-- 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
Criar uma bifurcação de uma instância existente:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance;
Criar uma bifurcação em um ponto no tempo específico:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (TIMESTAMP => '2025-01-15 12:00:00'::TIMESTAMP_NTZ);
Criar uma bifurcação de 2 horas atrás com um tamanho de instância diferente:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (OFFSET => -7200)
COMPUTE_FAMILY = 'STANDARD_L';
Criar uma bifurcação para relatórios com um tamanho de instância maior e armazenamento diferente:
-- 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';
Criar uma bifurcação à meia-noite UTC para testes diários:
-- 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);
Criar uma bifurcação de desenvolvimento com HA desabilitada para reduzir custos:
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';
Recuperar-se da exclusão acidental de dados usando uma bifurcação de antes do incidente:
-- 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';
