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>' [ , ... ] ) ]
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>' [ , ... ] ) ]
Paramètres requis¶
nameSpé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_gbSpé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 :
FALSEPOSTGRES_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ùcomponentest soitpostgres(pour les paramètres du serveur PostgreSQL), soitpgbouncer(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_instanceCré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 => timestampSpé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_differenceSpécifie la différence en secondes par rapport au temps actuel, sous la forme
-N, oùNpeut être un entier ou une expression arithmétique (par exemple,-120correspond à 120 secondes,-30*60correspond à 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_FAMILYSTORAGE_SIZE_GBHIGH_AVAILABILITYPOSTGRES_SETTINGS
Sortie¶
Lorsque vous créez une nouvelle instance, la commande renvoie une seule ligne avec les colonnes suivantes :
Colonne |
Description |
|---|---|
|
État de l’opération de création. |
|
Nom d’hôte pour la connexion à l’instance. |
|
Noms d’utilisateur et mots de passe pour les rôles |
|
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;
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';
