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

La syntaxe suivante crée un fork d’une instance existante à un moment donné. Les clauses FORK utilisent la reprise ponctuelle avec la même syntaxe AT |BEFORE que Time Travel, mais crée une copie physique complète de l’instance 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

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

Lorsque vous diminuez la taille de stockage, vous ne pouvez pas réduire la quantité trop près de la quantité de données sur l’instance. La nouvelle taille doit correspondre au moins à 1,4x la quantité d’utilisation du disque que l’instance utilise actuellement. De cette façon, il est encore possible d’ajouter des données supplémentaires sans déclencher une augmentation automatique du stockage.

AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }

Spécifie la méthode d’authentification pour l’instance. POSTGRES indique que seuls les mots de passe Postgres peuvent être utilisés. POSTGRES_OR_SNOWFLAKE permet également d’utiliser des mots de passe de jetons d’accès à courte durée de vie. Voir Authentification par jeton Snowflake pour Snowflake Postgres pour plus de détails.

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", ...}'
Copy

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"}'
Copy

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.

  • Le temps nécessaire pour créer un fork dépend de la quantité de données dans l’instance source. Les grandes bases de données contenant plus de données prennent plus de temps pour forker. La famille de calcul (taille de l’instance) de la source n’affecte pas significativement la durée du fork.

  • 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

    Le fork Postgres ne fait pas partie de la fonctionnalité :doc:` Time Travel </user-guide/data-time-travel>` de Snowflake, qui utilise la technologie zéro copie pour les tables. Cependant, le fork utilise la même syntaxe AT | BEFORE pour spécifier un point dans le temps.

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

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

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
Copy

Créer un fork d’une instance existante :

CREATE POSTGRES INSTANCE my_fork
  FORK my_source_instance;
Copy

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

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

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

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

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

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