CREATE POSTGRES INSTANCE

Crée une nouvelle instance Snowflake Postgres ou crée un fork d’une instance existante.

Le fork crée une copie complète et indépendante d’une instance à un moment donné en utilisant la récupération ponctuelle (PITR). Cela est utile pour la récupération, les tests ou la création d’environnements de développement à partir de données de production.

Voir aussi :

ALTER POSTGRES INSTANCE, DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE, SHOW POSTGRES INSTANCES

Syntaxe

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

The following syntax creates a fork of an existing instance at a point in time. The FORK clause uses point-in-time recovery with the same AT | BEFORE syntax as Time Travel, but creates a full physical copy of the Postgres instance:

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

Paramètres requis

name

Spécifie l’identificateur (nom) de l’instance Postgres ; doit être unique pour le compte.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (par exemple, "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus d’informations, voir Exigences relatives à l’identificateur.

COMPUTE_FAMILY = 'compute_family'

Spécifie la taille de l’instance pour l’instance Postgres.

Snowflake Postgres propose trois niveaux :

  • Burstable (BURST_XS, BURST_S, BURST_M) : Rentable pour le développement et les charges de travail intermittentes. Limité à 100GB de stockage et ne prend pas en charge la haute disponibilité.

  • Standard (STANDARD_M par STANDARD_24XL) : CPU et mémoire équilibrés pour les charges de travail à usage général. Prend en charge toutes les fonctionnalités, y compris la haute disponibilité.

  • Mémoire optimisée (HIGHMEM_L par HIGHMEM_48XL) : Rapport mémoire-CPU supérieur pour les requêtes gourmandes en mémoire et les index volumineux. Prend en charge toutes les fonctionnalités, y compris la haute disponibilité.

Note

Certaines fonctionnalités nécessitent des familles de calcul spécifiques. Par exemple, la haute disponibilité (HIGH_AVAILABILITY = TRUE) n’est disponible que sur les instances STANDARD etHIGHMEM, et non sur les instances BURST.

STORAGE_SIZE_GB = storage_gb

Spécifie la taille de stockage en GB. Doit être comprise entre 10 et 65 535.

Le stockage est facturé séparément du calcul sur la base du montant alloué. Vous pouvez augmenter ou réduire la taille du stockage ultérieurement à l’aide de ALTER POSTGRES INSTANCE. Pour plus d’informations sur les coûts, consultez Évaluation des coûts de Snowflake Postgres.

Note

When you decrease the storage size, you can’t set it too close to current disk usage. The new size must be at least 1.4x the disk space currently in use. That way, there’s still room to add more data without triggering an automatic storage increase.

AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }

Specifies the authentication method for the instance. POSTGRES indicates that only Postgres user passwords can be used. POSTGRES_OR_SNOWFLAKE also allows the use of short-lived access token passwords. See Authentification par jeton Snowflake pour Snowflake Postgres for more details.

Paramètres facultatifs

POSTGRES_VERSION = { 16 | 17 | 18 }

Spécifie la version supérieure de Postgres à utiliser.

Bien que la dernière version comprenne de nouvelles fonctionnalités et améliorations, vous pouvez choisir une version antérieure pour des raisons de compatibilité des applications ou pour correspondre aux instances existantes. Vous pouvez passer ultérieurement à une version plus récente en utilisant ALTER POSTGRES INSTANCE.

Par défaut : La dernière version de Postgres.

NETWORK_POLICY = 'network_policy'

Spécifie la politique réseau à utiliser pour l’instance. Pour spécifier ce paramètre, vous devez disposer du privilège USAGE sur l’objet de politique réseau.

Par défaut : Aucune politique réseau n’est appliquée.

Important

Sans politique réseau, l’instance ne peut pas accepter de connexions entrantes. Vous pouvez toujours voir l’instance en utilisant les commandes SHOW et DESCRIBE, mais vous ne pouvez pas vous connecter à la base de données Postgres tant que vous n’avez pas joint une politique réseau à l’aide de ALTER POSTGRES INSTANCE.

STORAGE_INTEGRATION = 'storage_integration_name'

Attache une intégration de stockage de type POSTGRES_EXTERNAL_STORAGE à l’instance Postgres, permettant à l’extension pg_lake d’accéder aux données d’un stockage externe d’objets. Pour la procédure de configuration complète, consultez Configuration du stockage S3 pour pg_lake.

Vous pouvez également joindre ou supprimer une intégration de stockage ultérieurement à l’aide de ALTER POSTGRES INSTANCE.

Par défaut : Aucune intégration de stockage n’est jointe.

HIGH_AVAILABILITY = { TRUE | FALSE }

Spécifie s’il convient d’activer la haute disponibilité pour l’instance.

La haute disponibilité crée une instance de veille dans une zone de disponibilité distincte pour le basculement automatique. Cela minimise le temps d’arrêt si la première instance devient indisponible. Sans la HA, la récupération nécessite une restauration à partir de la sauvegarde, ce qui peut prendre des heures pour les instances volumineuses ou actives. Notez que l’activation ou la désactivation ultérieure de la HA à l’aide de ALTER POSTGRES INSTANCE nécessite une:doc:opération de maintenance </user-guide/snowflake-postgres/managing-instances>.

Important

Les tailles des instances Burstable (BURST_XS, BURST_S, BURST_M) ne prennent pas en charge la haute disponibilité.

Par défaut : FALSE

POSTGRES_SETTINGS = 'json_string'

Spécifie des paramètres du serveur Postgres personnalisés pour l’instance au format JSON :

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

Le format utilise component:name, où component est soit postgres (pour les paramètres du serveur PostgreSQL), soit pgbouncer (pour les paramètres du pooling de connexions). Par exemple :

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

Consultez Paramètres du serveur Snowflake Postgres pour voir les paramètres disponibles.

Par défaut : Aucun paramètre de configuration Postgres personnalisé n’est défini.

COMMENT = 'string_literal'

Spécifie un commentaire pour l’instance Postgres.

Les commentaires sont utiles pour documenter l’objectif ou la propriété d’une instance, tels que « instance de production pour le service de facturation » ou « environnement QA pour l’équipe X ». Contrairement aux balises, les commentaires sont de type texte libre et non utilisés pour le suivi des organisations ou des coûts.

Par défaut : aucune valeur.

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Spécifie le nom de la balise et la valeur de la chaîne de la balise.

La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.

Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises.

Paramètres du fork

Le fork d’une instance Snowflake Postgres crée une copie identique avec tous les mêmes objets de schéma et les mêmes données de table. Vous pouvez également spécifier un point dans le temps afin que l’instance forkée reflète un état précédent de l’instance. De cette manière, vous pouvez résoudre les problèmes d’intégrité des données tels que la suppression accidentelle d’objets. Vous pouvez également explorer des scénarios dans un environnement de développement et de test, par exemple en essayant différentes configurations d’instances avec des données identiques. Pour plus d’informations, voir Récupération ponctuelle Snowflake Postgres.

FORK source_instance

Crée une nouvelle instance sous forme de fork (copie) de l’instance source spécifiée.

{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )

Spécifie le point dans le temps à partir duquel effectuer un fork. Vous ne pouvez pas effectuer de fork à partir d’un moment situé plus de 10 jours dans le passé. L’horodatage ou le décalage doit être compris dans la période de conservation des données Postgres de 10 jours.

La clause AT | BEFORE accepte l’un des paramètres suivants :

TIMESTAMP => timestamp

Spécifie une date et une heure exactes à utiliser pour Time Travel. La valeur doit être explicitement convertie en type de données TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ.

OFFSET => time_difference

Spécifie la différence en secondes par rapport au temps actuel, sous la forme -N, où N peut être un entier ou une expression arithmétique (par exemple, -120 correspond à 120 secondes, -30*60 correspond à 30 minutes).

Par défaut : Utilise l’heure actuelle.

Lors de la création d’un fork, les paramètres suivants sont facultatifs et correspondent par défaut aux valeurs de l’instance source :

  • COMPUTE_FAMILY

  • STORAGE_SIZE_GB

  • HIGH_AVAILABILITY

  • POSTGRES_SETTINGS

Sortie

Lorsque vous créez une nouvelle instance, la commande renvoie une seule ligne avec les colonnes suivantes :

Colonne

Description

status

État de l’opération de création.

host

Nom d’hôte pour la connexion à l’instance.

access_roles

Noms d’utilisateur et mots de passe pour les rôles snowflake_admin et application.

default_database

Base de données par défaut de l’instance.

Important

La colonne access_roles contient des identifiants de connexion que vous ne pouvez pas récupérer plus tard. Enregistrez ces détails dans un endroit sûr.

Lorsque vous créez un fork, la commande renvoie une seule ligne avec les colonnes status et host uniquement. Le fork utilise les mêmes identifiants de connexion que l’instance source, au moment auquel le fork correspond.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

CREATE POSTGRES INSTANCE

Compte

Par défaut, seul le rôle ACCOUNTADMIN dispose de ce privilège.

USAGE

Politique réseau

Requis uniquement si vous spécifiez une NETWORK_POLICY.

USAGE

Intégration de stockage

Requis uniquement si vous spécifiez une STORAGE_INTEGRATION.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • La création d’une nouvelle instance prend un certain temps. L’instance affiche son état actuel pendant qu’elle est cours de création. Vous pouvez utiliser la commande DESC POSTGRES INSTANCE pour suivre l’état lors de la configuration de l’instance.

  • Lorsque vous créez un fork, vous ne spécifiez pas et ne voyez pas les identifiants de connexion. En effet, le fork utilise les mêmes identifiants de connexion que l’instance source, au moment auquel le fork correspond. Vous pouvez régénérer les identifiants de connexion de l’instance forkée ultérieurement, si vous devez fournir l’accès à un ensemble d’utilisateurs différent de celui de l’instance d’origine.

  • The time needed to create a fork depends on the amount of data in the source instance. Larger databases with more data take longer to fork. The compute family (instance size) of the source doesn’t significantly affect fork duration.

  • Le fork effectue une copie complète des données à l’aide de la sauvegarde et de la relecture du journal d’écriture anticipée (WAL), ce qui signifie que l’instance forkée est entièrement séparée : la destruction de l’instance source n’affecte pas les forks que vous avez créés à partir de celle-ci.

    Note

    Postgres forking isn’t part of the Snowflake Time Travel feature, which uses zero-copy technology for tables. However, forking uses the same AT | BEFORE syntax to specify a point in time.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemples

Créer une instance Postgres de base :

CREATE POSTGRES INSTANCE my_postgres
  COMPUTE_FAMILY = 'STANDARD_S'
  STORAGE_SIZE_GB = 50
  AUTHENTICATION_AUTHORITY = POSTGRES;

Créer une instance Postgres avec haute disponibilité et une politique réseau :

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

Créer une instance et configurez une politique réseau plus tard :

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

Créer un fork d’une instance existante :

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance;

Créer un fork à un point précis dans le temps :

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance
  AT (TIMESTAMP => '2025-01-15 12:00:00'::TIMESTAMP_NTZ);

Créer un fork de 2 heures en arrière avec une taille d’instance différente :

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance
  AT (OFFSET => -7200)
  COMPUTE_FAMILY = 'STANDARD_L';

Créer un fork pour la création de rapports avec une taille d’instance plus grande et un stockage différent :

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

Créer un fork à minuit UTC pour les tests quotidiens :

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

Créer un fork de développement avec la HA désactivée pour réduire les coûts :

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

Récupérer des données supprimées par erreur à l’aide d’un fork antérieur à l’incident :

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