CREATE POSTGRES INSTANCE¶
Erstellt eine neue:doc:Snowflake Postgres-Instanz </user-guide/snowflake-postgres/about> oder erstellt eine Fork einer bestehenden Instanz.
Durch das Forking wird eine vollständige, unabhängige Kopie einer Instanz zu einem bestimmten Zeitpunkt mithilfe der :doc:` zeitpunktbezogenen Wiederherstellung (PITR )</user-guide/snowflake-postgres/postgres-point-in-time-recovery>` erstellt. Dies ist nützlich für die Wiederherstellung, das Testen oder die Erstellung von Entwicklungsumgebungen aus Produktionsdaten.
- Siehe auch:
ALTER POSTGRES INSTANCE , DESCRIBE POSTGRES INSTANCE, DROP POSTGRES INSTANCE , SHOW POSTGRES INSTANCES
Syntax¶
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>' [ , ... ] ) ]
Die folgende Syntax erstellt eine Fork einer bestehenden Instanz zu einem bestimmten Zeitpunkt. Die FORK-Klausel verwendet die zeitpunktbezogene Wiederherstellung mit der gleichenAT |BEFORE-Syntax wie Time Travel, erstellt aber eine vollständige physische Kopie der Postgres-Instanz:
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>' [ , ... ] ) ]
Erforderliche Parameter¶
nameGibt den Bezeichner (Namen) für die Postgres-Instanz an. Der Bezeichner muss für das Konto eindeutig sein.
Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B.
"My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.
COMPUTE_FAMILY = 'compute_family'Gibt die Größe der Instanz für die Postgres-Instanz an.
Snowflake Postgres bietet drei Stufen an:
Burstable (BURST_XS, BURST_S, BURST_M): Kosteneffizient für Entwicklung und zeitweilige Workloads. Beschränkt auf 100GB Speicher und keine Unterstützung für Hochverfügbarkeit.
Standard (STANDARD_M bisSTANDARD _24XL): Ausgewogene CPU und Arbeitsspeicher für allgemeine Workloads. Unterstützt alle Features einschließlich Hochverfügbarkeit.
Speicheroptimiert (HIGHMEM_L bis HIGHMEM _48XL): Höheres Speicher-zu-CPU-Verhältnis für speicherintensive Abfragen und große Indizes. Unterstützt alle Features einschließlich Hochverfügbarkeit.
Bemerkung
Einige Features erfordern spezielle Computefamilien. Hochverfügbarkeit (
HIGH_AVAILABILITY = TRUE) ist beispielsweise nur auf STANDARD-und HIGHMEM-Instanzen, nicht aber auf BURST-Instanzen verfügbar.STORAGE_SIZE_GB = storage_gbGibt die Speichergröße in GB an. Muss zwischen 10 und 65.535 liegen.
Die Abrechnung des Speichers erfolgt getrennt von der Verarbeitung auf der Grundlage der zugewiesenen Menge. Sie können die Speichergröße später mit ALTERPOSTGRESINSTANCE erhöhen oder verringern. Weitere Informationen über Kosten finden Sie unter Snowflake Postgres-Kostenbewertung.
Bemerkung
Wenn Sie die Speichergröße verringern, darf sie nicht zu nahe an der aktuellen Datenmenge der Instanz liegen. Die neue Größe muss mindestens das 1,4-fache der Festplattennutzung betragen, die derzeit von der Instanz verwendet wird. Auf diese Weise ist immer noch Platz, um weitere Daten hinzuzufügen, ohne dass eine automatische Speichererhöhung ausgelöst wird.
AUTHENTICATION_AUTHORITY = { POSTGRES | POSTGRES_OR_SNOWFLAKE }Gibt die Authentifizierungsmethode für die Instanz an. POSTGRES gibt an, dass nur Postgres-Nutzungskennwörter verwendet werden können.POSTGRES_OR_SNOWFLAKE ermöglicht auch die Verwendung von kurzlebigen Kennwörtern für Zugriffstoken. Weitere Details dazu finden Sie unter Snowflake-Token-Authentifizierung für Snowflake Postgres.
Optionale Parameter¶
POSTGRES_VERSION = { 16 | 17 | 18 }Gibt die zu verwendende Hauptversion von Postgres an.
Die neueste Version enthält zwar neue Features und Verbesserungen, aber Sie können auch eine frühere Version wählen, um die Anwendungskompatibilität zu gewährleisten oder um vorhandene Instanzen anzupassen. Sie können später mit ALTERPOSTGRESINSTANCE auf eine neuere Version aktualisieren.
Standard: Die neueste Postgres-Version.
NETWORK_POLICY = 'network_policy'Gibt die Netzwerkrichtlinie an, die für die Instanz verwendet werden soll. Um diesen Parameter anzugeben, müssen Sie über die USAGE-Berechtigung für das Netzwerkrichtlinienobjekt verfügen.
Standard: Es wird keine Netzwerkrichtlinie angewendet.
Wichtig
Ohne eine Netzwerkrichtlinie kann die Instanz keine eingehenden Verbindungen akzeptieren. Sie können die Instanz weiterhin mit den Befehlen SHOW und DESCRIBE angeben, können aber erst dann eine Verbindung zur Postgres-Datenbank herstellen, wenn Sie eine Netzwerkrichtlinie mit ALTERPOSTGRESINSTANCE zuordnen.
STORAGE_INTEGRATION = 'storage_integration_name'Fügt eine Speicherintegration vom Typ``POSTGRES_EXTERNAL_STORAGE`` zu der Postgres-Instanz hinzu, sodass die pg_lake-Erweiterung auf Daten in einem externen Objektspeicher zugreifen kann. Die vollständige Einrichtungsprozedur finden Sie unter Konfigurieren von S3-Speicher für „pg_lake“.
Sie können eine Speicherintegration auch später mit ALTER POSTGRES INSTANCE hinzufügen oder entfernen.
Standard: Es ist keine Speicherintegration zugeordnet.
HIGH_AVAILABILITY = { TRUE | FALSE }Gibt an, ob Hochverfügbarkeit für die Instanz aktiviert werden soll.
Bei Hochverfügbarkeit wird eine Standardinstanz in einer separaten Verfügbarkeitszone für ein automatisches Failover bereitgestellt. Dies minimiert Ausfallzeiten, wenn die primäre Instanz nicht mehr verfügbar ist. Ohne HA erfordert die Wiederherstellung die Wiederherstellung aus einem Backup, was bei großen oder aktiven Instanzen Stunden dauern kann. Beachten Sie, dass für das Aktivieren oder Deaktivieren von HA mitALTERPOSTGRESINSTANCE zu einem späteren Zeitpunkt ein Wartungsvorgang erforderlich ist.
Wichtig
Burstable-Instanzgrößen (BURST_XS, BURST_S, BURST_M) unterstützen keine Hochverfügbarkeit.
Standard:
FALSEPOSTGRES_SETTINGS = 'json_string'Gibt kundenspezifische Postgres-Servereinstellungen für die Instanz imJSON-Format an:
'{"component:name" = "value", ...}'Das Format verwendet
component:name, wobei``component`` entwederpostgres(fürPostgreSQL-Servereinstellungen) oderpgbouncer(für Einstellungen für den Verbindungspooler) ist. Beispiel:'{"postgres:work_mem" = "128MB", "pgbouncer:default_pool_size" = "200"}'Verfügbare Einstellungen finden Sie unter Snowflake Postgres-Servereinstellungen.
Standard: Es werden keine benutzerdefinierten Postgres-Konfigurationsparameter festgelegt.
COMMENT = 'string_literal'Gibt einen Kommentar für die Postgres-Instanz an.
Kommentare sind nützlich, um den Zweck oder die Eigentümerschaft einer Instanz zu dokumentieren, z. B. „Produktionsinstanz für Abrechnungsservice“ oder „QA-Umgebung für Team X“. Im Gegensatz zu Tags sind Kommentare freier Text und werden nicht für die Organisation oder die Kostenverfolgung verwendet.
Standard: Kein Wert.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an.
Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann.
Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingente.
Fork-Parameter¶
Beim Forking einer Snowflake Postgres-Instanz wird eine identische Kopie mit allen Schemaobjekten und Tabellendaten erstellt. Sie können auch einen Zeitpunkt angeben, sodass die geforkte Instanz einen früheren Zustand der Instanz widerspiegelt. Auf diese Weise können Sie Probleme mit der Datenintegrität beheben, z. B. wenn Sie versehentlich Objekte löschen. Sie können auch Szenarios in einer Entwicklungs- und Testumgebung erkunden, z. B. wenn Sie verschiedene Instanzkonfigurationen mit identischen Daten testen. Weitere Informationen dazu finden Sie unter Zeitpunktbezogene Snowflake Postgres-Wiederherstellung.
FORK source_instanceErstellt eine neue Instanz als Fork (Kopie) der angegebenen Quellinstanz.
{ AT | BEFORE } ( { TIMESTAMP => timestamp | OFFSET => time_difference } )Gibt den Zeitpunkt an, von dem ab die Fork erstellt werden soll. Sie können nicht von einem Zeitpunkt aus starten, der mehr als 10 Tage zurückliegt. Der Zeitstempel oder Offset muss innerhalb der 10-tägigen Datenaufbewahrungsfrist liegen.
Die AT | BEFORE-Klausel akzeptiert einen der folgenden Parameter:
TIMESTAMP => timestampGibt ein genaues Datum und eine genaue Zeit für Time Travel an. Der Wert muss explizit in einen TIMESTAMP-, TIMESTAMP_LTZ-, TIMESTAMP_NTZ- oder TIMESTAMP_TZ- Datentyp umgewandelt werden.
OFFSET => time_differenceGibt die Differenz in Sekunden von der aktuellen Zeit im Format
-Nan, wobeiNeine Ganzzahl oder ein arithmetischer Ausdruck sein kann (z. B. entspricht-120120 Sekunden;-30*60entspricht 30 Minuten).
Standard: Verwendet die aktuelle Uhrzeit.
Beim Erstellen einer Fork sind die folgenden Parameter optional und werden standardmäßig auf die Werte aus der Quellinstanz gesetzt:
COMPUTE_FAMILYSTORAGE_SIZE_GBHIGH_AVAILABILITYPOSTGRES_SETTINGS
Ausgabe¶
Wenn Sie eine neue Instanz erstellen, gibt der Befehl eine Zeile mit den folgenden Spalten zurück:
Spalte |
Beschreibung |
|---|---|
|
Status des Erstellungsvorgangs. |
|
Hostname für die Verbindung mit der Instanz. |
|
Benutzernamen und Kennwörter für die``snowflake_admin``- und``application``-Rollen. |
|
Standarddatenbank für die Instanz. |
Wichtig
Die access_roles-Spalte enthält Anmeldeinformationen, die Sie später nicht mehr abrufen können. Speichern Sie diese Details an einem sicheren Ort.
Wenn Sie eine Fork erstellen, gibt der Befehl eine Zeile nur mit status- und host-Spalten zurück. Die Fork verwendet die gleichen Anmeldeinformationen, die die Quellinstanz zu dem Zeitpunkt hatte, dem die Fork entspricht.
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:
Berechtigung |
Objekt |
Anmerkungen |
|---|---|---|
CREATE POSTGRES INSTANCE |
Konto |
Standardmäßig verfügt die Rolle ACCOUNTADMIN über diese Berechtigung. |
USAGE |
Netzwerkrichtlinie |
Nur erforderlich, wenn eine NETWORK_POLICY angegeben wird. |
USAGE |
Speicherintegration |
Nur erforderlich, wenn eine STORAGE_INTEGRATION angegeben wird. |
Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.
Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.
Nutzungshinweise¶
Das Erstellen einer neuen Instanz nimmt einige Zeit in Anspruch. Die Instanz zeigt bei ihrer Erstellung den aktuellen Status an. Sie können den DESCPOSTGRESINSTANCE-Befehl verwenden, um den Status während der Einrichtung der Instanz zu verfolgen.
Wenn Sie eine Fork erstellen, geben Sie die Anmeldeinformationen weder an noch sehen Sie diese. Das liegt daran, dass die Fork die gleichen Anmeldeinformationen verwendet, die die Quellinstanz zu dem Zeitpunkt hatte, dem die Fork entspricht. Sie können die Anmeldeinformationen für die geforkte Instanz später neu generieren, falls Sie einer anderen Benutzergruppe als auf der ursprünglichen Instanz Zugriff gewähren müssen.
Die für das Erstellen einer Fork benötigte Zeit hängt von der Datenmenge in der Quellinstanz ab. Größere Datenbanken mit mehr Daten brauchen hierfür länger. Die Computefamilie (Größe der Instanz) der Quelle hat keinen wesentlichen Einfluss auf die Dauer der Fork-Erstellung.
Beim Forking wird eine vollständige Datenkopie mithilfe eines Backups und der Wiederherstellung des Write-Ahead-Logs (WAL) erstellt, was bedeutet, dass die geforkte Instanz vollständig unabhängig ist: Wenn Sie die Quellinstanz löschen, hat dies keine Auswirkungen auf die daraus erstellten Forks.
Bemerkung
Postgres-Forking ist nicht Teil des Snowflake-Features Time Travel, das die Nullkopie-Technologie für Tabellen verwendet. Beim Forking wird jedoch dieselbe AT | BEFORE-Syntax verwendet, um einen Zeitpunkt anzugeben.
Metadaten:
Achtung
Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „User“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.
Beispiele¶
Erstellen einer Postgres-Basisinstanz:
CREATE POSTGRES INSTANCE my_postgres
COMPUTE_FAMILY = 'STANDARD_S'
STORAGE_SIZE_GB = 50
AUTHENTICATION_AUTHORITY = POSTGRES;
Erstellen einer Postgres-Instanz mit Hochverfügbarkeit und einer Netzwerkrichtlinie:
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';
Erstellen einer Instanz und späterer Konfiguration einer Netzwerkrichtlinie:
-- 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
Erstellen einer Fork einer bestehenden Instanz:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance;
Erstellen einer Fork zu einem bestimmten Zeitpunkt:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (TIMESTAMP => '2025-01-15 12:00:00'::TIMESTAMP_NTZ);
Erstellen einer Fork vom Stand vor 2 Stunden mit einer anderen Instanzgröße:
CREATE POSTGRES INSTANCE my_fork
FORK my_source_instance
AT (OFFSET => -7200)
COMPUTE_FAMILY = 'STANDARD_L';
Erstellen Sie einer Fork für Berichte mit einer größeren Instanzgröße und einem anderen Speicher:
-- 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';
Erstellen einer Fork um Mitternacht UTC für tägliche Tests:
-- 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);
Erstellen einer Entwicklungs-Fork mit deaktivierter HA, um die Kosten zu reduzieren:
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';
Wiederherstellung einer versehentlichen Datenlöschung mit einer Fork aus der Zeit vor dem Vorfall:
-- 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';
