SnowConvert AI – Funktionale Unterschiede bei PostgreSQL¶
Bemerkung
SnowConvert AI für PostgreSQL unterstützt derzeit die Bewertung und Übersetzung für TABLES und VIEWS. Obwohl SnowConvert AI andere Arten von Anweisungen erkennen kann, werden diese nicht vollständig unterstützt.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-PG0001¶
FOUND könnte sich in einigen Szenarien in Snowflake anders verhalten.
Schweregrad¶
Niedrig
Beschreibung¶
Die FOUND-Eigenschaft in PostgreSQL basiert auf der zuletzt ausgeführten Abfrage und kann durch bestimmte Anweisungen beeinflusst werden, wie z. B. INSERT, UPDATE, DELETE, MERGE, SELECT INTO, PERFORM, FETCH und FOR-Loops. Weitere Details zu dieser Eigenschaft finden Sie in PostgreSQL-Dokumentation.
In Snowflake gibt es für die folgenden Szenarien keine direkte Übersetzung für diese Eigenschaft:
INSERTUPDATEDELETEMERGE
Der konvertierte Code verwendet die Snowflake-Eigenschaft SQLFOUND (siehe Dokumentation), da sie sich wie die PostgreSQL FOUND-Eigenschaft verhält.
Sonstige Fälle:
SELECT INTOPERFORMFETCH
Der konvertierte Code ist ein kundenspezifischer UDF (IS_FOUND_UDF), der sich wie die PostgreSQL FOUND-Eigenschaft verhält.
Dies geschieht, weil SQLFOUND seinen Wert nur dann ändert, wenn mindestens eine Zeile von der zuletzt ausgeführten Abfrage betroffen ist. Wenn die letzte Abfrage keine Zeile ändert, ändert sie sich nicht.
Der IS_FOUND_UDF funktioniert nur bei Anweisungen, die Zeilen zurückgeben. Wenn keine Zeile zurückgegeben wird, wird FALSE zurückgegeben.
SQLFOUND-Beispiel¶
Die letzte Abfrage betrifft eine Tabelle. SQLFOUND ist der Funktion PostgreSQL am nächsten.
Beispiel für IS_FOUND\_UDF¶
Die letzte Abfrage gibt eine Zeile zurück, ändert aber nichts, sodass die IS_FOUND_UDF() der PostgreSQL-Funktion am nächsten kommt.
Quellcode von IS_FOUND\_UDF¶
Codebeispiel¶
INSERT-Anweisung:¶
PostgreSQL¶
Snowflake¶
Update-Anweisung:¶
PostgreSQL¶
Snowflake¶
Anweisung löschen:¶
PostgreSQL¶
Snowflake¶
Merge-Anweisung:¶
PostgreSQL¶
Snowflake¶
SELECT INTO-Anweisung¶
PostgreSQL¶
Snowflake¶
Anweisungen ausführen:¶
PostgreSQL¶
Snowflake¶
FETCH-Anweisung:¶
PostgreSQL¶
Snowflake¶
SSC-FDM-PG0002¶
Bpchar in varchar konvertiert.
Beschreibung¶
Diese Warnung wurde hinzugefügt, da der Typ bpchar („blank-padded char“) möglicherweise einen Unterschied zwischen der funktionalen Äquivalenz und dem Datentyp varchar in Snowflake aufweist. Beide Datentypen können jedoch die Werte bis zur Länge von „n“ Zeichen speichern und verbrauchen nur Speicherplatz für die Menge der tatsächlich gespeicherten Daten. Der Hauptunterschied tritt auf, wenn am Ende der Daten Leerzeichen stehen, die nicht von bpchar gespeichert werden, sondern von Snowflake.
Aus diesem Grund können wir die RTRIM-Funktion verwenden, sodass diese Leerzeichen nicht gespeichert werden. Allerdings kann es Fälle geben, in denen die Funktionalität nicht vollständig übereinstimmt.
Codebeispiel¶
Eingabecode:¶
Spaltendefinition¶
Explizite Umwandlung¶
Generierter Code:¶
Spaltendefinition¶
Explizite Umwandlung¶
Best Practices¶
Die
rtrim-Funktion kann Speicherunterschiede auflösen, falls Sie nicht möchten, dass diese Leerzeichen gespeichert werden. Dieser Fall wird in der expliziten Umwandlung behandelt, jedoch kann es andere Szenarien geben, in denen er manuell behandelt werden muss. Weitere Informationen dazu finden Sie in der Snowflake-Dokumentation zu RTRIM.
SSC-FDM-PG0003¶
Bytea in Binärwerte konvertiert
Beschreibung¶
Diese Warnung wurde hinzugefügt, weil bei der Konvertierung des Bytea-Datentyps in Binärwerte die Größenbeschränkung von 1GB auf 8MB erheblich reduziert wird.
Codebeispiel¶
Eingabecode:¶
Generierter Code:¶
Best Practices¶
Weitere Informationen dazu finden Sie in der Snowflake-Dokumentation zu [Binärdatentyp] (https://docs.snowflake.com/en/sql-reference/data-types-text.html#binary).
SSC-FDM-PG0004¶
Das Datumsausgabeformat kann variieren
Beschreibung¶
The date output format may vary depending on the Timestamp type and the timestamp_output_format being used, see the Snowflake CURRENT_TIMESTAMP documentation.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
Beispiele¶
Beispiel mit CREATE TABLE.
Eingabecode:¶
PostgreSQL¶
Ergebnisse¶
platform_id |
dt_update |
clock_timestamp |
|---|---|---|
1 |
2023-02-05 22:47:34.275 -0600 |
2023-02-05 23:16:15.754 -0600 |
Generierter Code:¶
Snowflake¶
Ergebnisse¶
PLATFORM_ID |
DT_UPDATE |
CURRENT_TIMESTAMP(3) |
|---|---|---|
1 |
2023-02-05 20:52:30.082000000 |
2023-02-05 21:20:31.593 |
Beispiel mit SELECT mit clock_timestamp().
Eingabecode¶
PostgreSQL¶
Ergebnisse¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Generierter Code¶
Snowflake¶
Ergebnisse¶
CURRENT_TIMESTAMP(3) |
|---|
2023-02-05 21:29:24.258 |
SSC-FDM-PG0005¶
Die UNLOGGED-Tabelle wird in Snowflake nicht unterstützt; die geschriebenen Daten können eine andere Leistung aufweisen.
Beschreibung¶
Die PostgreSQL UNLOGGED-Tabellen bieten einen erheblichen Geschwindigkeitsvorteil, da die Protokollierung vor dem Schreiben (WAL) übersprungen wird. Ihre Daten werden jedoch nicht in Spiegel-Instanzen repliziert. Snowflake unterstützt diese Funktionalität nicht, daher wird die UNLOGGED-Klausel auskommentiert.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
SSC-FDM-PG0006¶
Suchpfad mit mehreren Schemas festlegen
Beschreibung¶
Set search path with multiple schemas is not supported in Snowflake, see the Snowflake USE SCHEMA documentation.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
SSC-FDM-PG0007¶
NULL wird in ‚‘ konvertiert und kann in Snowflake ein anderes Verhalten aufweisen.
Schweregrad¶
Niedrig
Beschreibung¶
In PostgreSQL wird Entfernen eines Kommentars über den Begriff NULL vorgenommen. In Snowflake besteht eine ähnliche Methode zum Entfernen eines Kommentars darin, den Wert einer leeren Zeichenfolge zuzuweisen '', um das gleiche Ergebnis zu liefern. Dieser Ansatz stellt sicher, dass der Kommentar effektiv einer leeren Zeichenfolge mit einem ähnlichen Verhalten zugeordnet wird.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
SSC-FDM-PG0008¶
Select Into-Anweisungen für unprotokollierte Tabellen werden von Snowflake nicht unterstützt.
Beschreibung¶
Select Into wird von Snowflake nicht unterstützt. Diese Funktion wurde mit CREATE TABLE AS emuliert. Darüber hinaus verwendet Snowflake immer Transaktionsprotokolle, um Tabellen zu schützen und die Datenintegrität und -wiederherstellung sicherzustellen. Folglich werden Tabellen mit der Option UNLOGGED von Snowflake nicht unterstützt.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
SSC-FDM-PG0009¶
Snowflake garantiert nicht, dass die Generierung von Sequenznummern ohne Lücken erfolgt
Beschreibung¶
Snowflake garantiert nicht, dass die Generierung von Sequenznummern ohne Lücken erfolgt. Die generierten Zahlen steigen im Wert (oder fallen im Wert, wenn die Schrittweite negativ ist), sind aber nicht unbedingt zusammenhängend.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
SSC-FDM-PG0010¶
Datatype of the left operand could not be determined. Results may vary due to the behavior of Snowflake’s bitwise function
Beschreibung¶
The bitwise operators << and >> are converted to the corresponding Snowflake functions BITSHIFTLEFT and BITSHIFTRIGHT. However, this transformation depends on knowing semantic information about the left operand, more specifically its datatype.
For shift operations involving integer left operands, the MOD function should be applied to the right operand to get equivalent results, as well as using the INTEGER_BITSHIFTLEFT_UDF helper for ensuring the equivalence of the shift left operation on integers. When the datatype of the left operand can not be determined, SnowConvert AI will generate this FDM to warn about the potential functional differences.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
Best Practices¶
Ensure the source code you migrate has no missing depedencies, by providing any missing object to SnowConvert AI the operands semantic information should be extracted correctly and this FDM should no longer appear
SSC-FDM-PG0011¶
Die Verwendung der COLLATE-Spalten-Einschränkung wurde für diese Mustererkennungsbedingung deaktiviert
Beschreibung¶
Diese Meldung wird hinzugefügt, wenn eine Mustererkennungsbedingung Argumente mit COLLATE-Spezifikationen verwendet, da sie derzeit in der Snowflake-Funktion für reguläre Ausdrücke nicht unterstützt werden. Folglich muss die COLLATE-Klausel deaktiviert werden, um diese Funktion verwenden zu können, was zu unterschiedlichen Ergebnissen führen kann.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Ergebnisse¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Ausgabecode:
Snowflake¶
Ergebnisse¶
CI |
CS |
|---|---|
FALSE |
FALSE |
Best Practices¶
Wenn Sie für diese Szenarien eine Äquivalenz benötigen, können Sie die folgenden Parameter manuell zur Funktion hinzufügen, um eine funktionale Äquivalenz zu erreichen:
Parameter
Beschreibung
cAbgleich, bei dem zwischen Groß- und Kleinschreibung unterschieden wird
iAbgleich ohne Berücksichtigung der Groß-/Kleinschreibung
Weitere Informationen dazu finden Sie unter dem folgenden Link.
SSC-FDM-PG0012¶
NOT NULL-Einschränkung wurde entfernt. Zuweisen von NULL zu dieser Variable führt nicht mehr zu einem Fehler.
Beschreibung¶
In PostgreSQL, specifying the NOT NULL constraint ensures that assigning a null value to a variable results in a runtime error. Since this clause does not exist in Snowflake, it is removed during transformation and assigning a NULL to this variable will no longer fail in execution.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Ergebnis¶
[22004] ERROR: NULL-Wert kann nicht der Variablen „v_notnull“ zugewiesen werden, die als NOT NULL deklariert wurde.
Generated Code:
Snowflake
Result
Hinweis
Diese Zuweisung wird in Snowflake nicht fehlschlagen.
Best Practices¶
Überprüfen Sie die Prozedurlogik, um sicherzustellen, dass dieser Variable kein
NULL-Wert zugewiesen ist.
SSC-FDM-PG0013¶
Funktion, die von Snowflake syntaktisch unterstützt wird, aber Funktionsunterschiede aufweisen kann
Beschreibung¶
Diese Funktionsunterschiedsmeldung weist darauf hin, dass Snowflake zwar die Syntax der Funktion unterstützt (entweder direkt oder über eine gleichwertige Zuordnung), deren Verhalten in einigen Situationen jedoch vom ursprünglichen Verhalten abweichen kann.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
Best Practices¶
Prüfen Sie sorgfältig das funktionale Verhalten auf unerwartete Ergebnisse, da Unterschiede nur in bestimmten Szenarien auftreten können.
SSC-FDM-PG0014¶
Unbekannter Pseudotyp, der in Texttyp umgewandelt wurde
Beschreibung¶
Diese Functional-Difference-Nachricht weist darauf hin, dass der in PostgreSQL verwendete Pseudo-Typ UNKNOWN in Snowflake nicht unterstützt und in einen Texttyp umgewandelt wird.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
Generierter Code:¶
Snowflake¶
Best Practices¶
Prüfen Sie sorgfältig die Verwendungen für die Spalten mit unbekannten Datentypen, da in bestimmten Szenarien Unterschiede auftreten können.
SSC-FDM-PG0015¶
PSQL-Befehl ist in Snowflake nicht anwendbar
Beschreibung¶
In Snowflake sind PSQL-Befehle nicht anwendbar. Obwohl er nicht mehr für die Ausführung benötigt wird, behält SnowConvert AI den ursprünglichen PSQL-Befehl als Kommentar bei.
Beispielcode¶
Eingabecode: ¶
Generierter Code: ¶
SSC-FDM-PG0016¶
Fest typisiertes Array ohne Typprüfung in ARRAY transformiert.
Beschreibung¶
SnowConvert AI fügt diese Warnung hinzu, da PostgreSQL-Arrays von beliebigen eingebauten oder benutzerdefinierten Basistypen, Enum-Typen, zusammengesetzten Typen, Bereichstypen oder Domänen unterstützt – Snowflake jedoch nicht. In Snowflake ist jeder Wert in einem semistrukturierten Array vom Typ VARIANT.
Beispielcode¶
Eingabecode: ¶
Generierter Code: ¶
SSC-FDM-PG0017¶
Eine benutzerdefinierte Funktion, die „void“ zurückgibt, wurde in eine Snowflake-Prozedur umgewandelt.
Beschreibung¶
SnowConvert AI generiert eine Warnung für jede Funktion, die „void“ zurückgibt. Dies liegt daran, dass Funktionen, die „void“ zurückgeben, normalerweise auf eine Prozedur und nicht auf eine Werte erzeugende Operation hinweisen, die manchmal eine spezielle Behandlung bei der Konvertierung erfordern kann.
Beispielcode¶
Eingabecode: ¶
Generierter Code: ¶
SSC-FDM-PG0018¶
Die zu analysierende Anweisung wird auskommentiert, was in Snowflake nicht möglich ist.
Beschreibung¶
SnowConvert AI markiert ANALYZE-Anweisungen mit einer Warnung und kommentiert sie aus. Während ANALYZE in PostgreSQL zum Sammeln von Tabellenstatistiken verwendet wird, verwaltet Snowflake diesen Prozess automatisch, wodurch die Anweisung nach der Konvertierung überflüssig und in der Regel nicht erforderlich ist.
Beispielcode¶
Eingabecode: ¶
Generierter Code: ¶
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.