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

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

Parâmetros obrigatórios

name

Especifica 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_gb

Especifica 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: FALSE

POSTGRES_SETTINGS = 'json_string'

Especifica configurações personalizadas do servidor Postgres para a instância no formato JSON:

'{"component:name" = "value", ...}'
Copy

O formato usa component:name, em que component é postgres (para configurações do servidor PostgreSQL) ou pgbouncer (para configurações do pool de conexões). Por exemplo:

'{"postgres:work_mem" = "128MB", "pgbouncer:default_pool_size" = "200"}'
Copy

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_instance

Cria 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 => timestamp

Especifica 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_difference

Especifica a diferença em segundos em relação à hora atual, no formato -N, em que N pode 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_FAMILY

  • STORAGE_SIZE_GB

  • HIGH_AVAILABILITY

  • POSTGRES_SETTINGS

Saída

Quando você cria uma nova instância, o comando retorna uma linha com as seguintes colunas:

Coluna

Descrição

status

Status da operação de criação.

host

Nome de host para conexão com a instância.

access_roles

Nomes de usuário e senhas para as funções snowflake_admin e application.

default_database

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

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

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
Copy

Criar uma bifurcação de uma instância existente:

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance;
Copy

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);
Copy

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

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

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);
Copy

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

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