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¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
Die letzte Abfrage betrifft eine Tabelle. SQLFOUND ist der Funktion PostgreSQL am nächsten.
Beispiel für IS_FOUND\_UDF¶
SELECT SampleColumn FROM SampleTable;
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¶
CREATE OR REPLACE FUNCTION FOUND_UDF()
RETURNS BOOLEAN
LANGUAGE SQL
IMMUTABLE
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "udf", "convertedOn": "09/09/2024" }}'
AS
$$
SELECT (count(*) != 0) FROM TABLE(result_scan(last_query_id()))
$$;
Codebeispiel¶
INSERT-Anweisung:¶
PostgreSQL¶
-- Found property used with INSERT statement.
CREATE OR REPLACE PROCEDURE FoundUsingInsertProcedure()
LANGUAGE plpgsql
AS $$
BEGIN
-- Insert into SampleTable
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with INSERT statement.
CREATE OR REPLACE PROCEDURE FoundUsingInsertProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
BEGIN
-- Insert into SampleTable
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
SELECT
SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
Update-Anweisung:¶
PostgreSQL¶
-- Found property used with UPDATE statement.
CREATE OR REPLACE PROCEDURE FoundUsingUpdateProcedure()
LANGUAGE plpgsql
AS
$$
BEGIN
UPDATE SampleTable
SET SampleColumn1 = 'SampleValue0.1'
WHERE SampleColumn1 = 'SampleValue0.1';
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with UPDATE statement.
CREATE OR REPLACE PROCEDURE FoundUsingUpdateProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
UPDATE SampleTable
SET SampleColumn1 = 'SampleValue0.1'
WHERE SampleColumn1 = 'SampleValue0.1';
SELECT
SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
Anweisung löschen:¶
PostgreSQL¶
-- Found property used with DELETE statement.
CREATE OR REPLACE PROCEDURE FoundUsingDeleteProcedure()
LANGUAGE plpgsql
AS
$$
BEGIN
DELETE FROM SampleTable
WHERE SampleColumn1 = 'SampleValue0.1';
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with DELETE statement.
CREATE OR REPLACE PROCEDURE FoundUsingDeleteProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
DELETE FROM
SampleTable
WHERE SampleColumn1 = 'SampleValue0.1';
SELECT
SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
Merge-Anweisung:¶
PostgreSQL¶
-- Found property used with MERGE statement.
CREATE OR REPLACE PROCEDURE FoundUsingMergeProcedure()
LANGUAGE plpgsql
AS
$$
BEGIN
MERGE INTO SampleTableB B
USING (SELECT * FROM SampleTableA) A
ON B.SampleColumn1 = A.SampleColumn2
WHEN MATCHED THEN DELETE;
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with MERGE statement.
CREATE OR REPLACE PROCEDURE FoundUsingMergeProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
MERGE INTO SampleTableB B
USING (SELECT * FROM SampleTableA) A
ON B.SampleColumn1 = A.SampleColumn2
WHEN MATCHED THEN DELETE !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MergeStatement' NODE ***/!!!;
SELECT
SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
SELECT INTO-Anweisung¶
PostgreSQL¶
-- Found property used with SELECT INTO statement.
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoProcedure()
LANGUAGE plpgsql
AS
$$
DECLARE
SampleNumber INTEGER;
BEGIN
SELECT 1 INTO SampleNumber;
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with SELECT INTO statement.
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
SampleNumber INTEGER;
BEGIN
SELECT 1 INTO
: SampleNumber;
SELECT
FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
Anweisungen ausführen:¶
PostgreSQL¶
-- Found property used with PERFORM statement.
CREATE OR REPLACE PROCEDURE FoundUsingPerformProcedure()
LANGUAGE plpgsql
AS
$$
BEGIN
PERFORM 1;
RETURN FOUND;
END;
$$;
Snowflake¶
-- Found property used with PERFORM statement.
CREATE OR REPLACE PROCEDURE FoundUsingPerformProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
SELECT
1;
RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
FETCH-Anweisung:¶
PostgreSQL¶
-- Found property used with FETCH statement.
CREATE OR REPLACE PROCEDURE FoundUsingFetchProcedure ()
LANGUAGE plpgsql
AS
$$
DECLARE
SampleRow VARCHAR;
SampleCursor CURSOR FOR SELECT EmptyColumn FROM EmptyTable;
BEGIN
OPEN SampleCursor;
FETCH SampleCursor;
CLOSE SampleCursor;
SELECT FOUND;
END;
$$;
Snowflake¶
-- Found property used with FETCH statement.
CREATE OR REPLACE PROCEDURE FoundUsingFetchProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
SampleRow VARCHAR;
SampleCursor CURSOR FOR SELECT EmptyColumn FROM
EmptyTable;
BEGIN
OPEN SampleCursor;
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FETCH SampleCursor;
CLOSE SampleCursor;
SELECT
FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
END;
$$;
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¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
Explizite Umwandlung¶
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Generierter Code:¶
Spaltendefinition¶
CREATE TABLE table1 (
col1 VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/,
col2 VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
Explizite Umwandlung¶
SELECT 'Y':: VARCHAR /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;
SELECT
RTRIM( 'Y ') :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/;
SELECT
RTRIM( COL1) :: VARCHAR(20) /*** SSC-FDM-PG0002 - BPCHAR CONVERTED TO VARCHAR. THESE TYPES MAY HAVE SOME FUNCTIONAL DIFFERENCES. ***/
FROM
tbl;
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:¶
CREATE TABLE tbl(
col BYTEA
);
Generierter Code:¶
CREATE TABLE tbl (
col BINARY /*** SSC-FDM-PG0003 - BYTEA CONVERTED TO BINARY. SIZE LIMIT REDUCED FROM 1GB TO 8MB ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
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¶
Das Datumsausgabeformat kann je nach Zeitstempeltyp und dem verwendeten timestamp_output_format variieren. Weitere Informationen erhalten Sie hier konsultieren. &.#x20;
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Generierter Code:¶
Snowflake¶
CREATE TABLE table1 (
dt_update TIMESTAMP_NTZ DEFAULT CAST(
--** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
CURRENT_TIMESTAMP() AS TIMESTAMP_NTZ)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "09/17/2024" }}';
Beispiele¶
Beispiel mit CREATE TABLE.
Eingabecode:¶
PostgreSQL¶
CREATE TABLE sample2 (
platform_id integer NOT NULL,
dt_update timestamp with time zone DEFAULT clock_timestamp()
);
insert into postgres.public.sample2 (platform_id) values (1);
select *, clock_timestamp() from postgres.public.sample2;
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¶
CREATE TABLE sample2 (
platform_id integer NOT NULL,
dt_update TIMESTAMP_TZ DEFAULT CAST(
--** SSC-FDM-PG0004 - THE DATE OUTPUT FORMAT MAY VARY DEPENDING ON THE TIMESTAMP TYPE AND THE TIMESTAMP_OUTPUT_FORMAT BEING USED. **
CURRENT_TIMESTAMP() AS TIMESTAMP_TZ)
);
insert into postgres.public.sample2 (platform_id) values (1);
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select *,
CURRENT_TIMESTAMP(3)
from
postgres.public.sample2;
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¶
select clock_timestamp();
Ergebnisse¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Generierter Code¶
Snowflake¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
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¶
CREATE UNLOGGED TABLE TABLE1 (
COL1 integer
);
Generierter Code:¶
Snowflake¶
CREATE
-- --** SSC-FDM-PG0005 - UNLOGGED TABLE IS NOT SUPPORTED IN SNOWFLAKE, DATA WRITTEN MAY HAVE DIFFERENT PERFORMANCE. **
-- UNLOGGED
TABLE TABLE1 (
COL1 integer
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "greenplum", "convertedOn": "04/21/2025", "domain": "test" }}';
SSC-FDM-PG0006¶
Suchpfad mit mehreren Schemas festlegen
Beschreibung¶
Das Festlegen eines Suchpfads mit mehreren Schemas wird in Snowflake nicht unterstützt. Weitere Informationen erhalten Sie hier.
Codebeispiel¶
Eingabecode:¶
PostgreSQL¶
SET SEARCH_PATH TO schema1, schema2, schema3;
Generierter Code:¶
Snowflake¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
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¶
COMMENT ON TABLE mytable IS NULL;
Generierter Code:¶
Snowflake¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN 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¶
select column1
into UNLOGGED NewTable
from oldTable;
Generierter Code:¶
Snowflake¶
CREATE TABLE IF NOT EXISTS NewTable AS
select column1
-- --** SSC-FDM-PG0008 - SELECT INTO UNLOGGED TABLES ARE NOT SUPPORTED BY SNOWFLAKE. **
-- into UNLOGGED NewTable
from
oldTable;
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¶
SELECT nextval('seq1');
Generierter Code:¶
Snowflake¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
SSC-FDM-PG0010¶
Die Ergebnisse können aufgrund des Verhaltens der bitweisen Funktion von Snowflake variieren.
Beschreibung¶
Die bitweisen Operatoren << and >> werden in die entsprechenden Snowflake-Funktionen BITSHIFTLEFT und BITSHIFTRIGHT umgewandelt. Aufgrund der Unterschiede in der Art und Weise, wie diese Funktionen Ausdrücke behandeln, können die Ergebnisse jedoch von denen in PostgreSQL abweichen.
Codebeispiel¶
Eingabecode:¶
PostgreSql¶
SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Ergebnis¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-2147483648 |
16 |
Generierter Code:¶
Snowflake¶
SELECT
--** SSC-FDM-PG0010 - RESULTS MAY VARY DUE TO THE BEHAVIOR OF SNOWFLAKE'S BITSHIFTLEFT BITWISE FUNCTION **
BITSHIFTLEFT( 1, 127) AS resultShiftedLeft,
--** SSC-FDM-PG0010 - RESULTS MAY VARY DUE TO THE BEHAVIOR OF SNOWFLAKE'S BITSHIFTRIGHT BITWISE FUNCTION **
BITSHIFTRIGHT( 16, 32) AS resultShiftedRight;
Ergebnis¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-170141183460469231731687303715884105728 |
0 |
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¶
CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE CASE_INSENSITIVE,
col2 VARCHAR(30) COLLATE CASE_SENSITIVE);
INSERT INTO collateTable values ('HELLO WORLD!', 'HELLO WORLD!');
SELECT
col1 SIMILAR TO 'Hello%' as ci,
col2 SIMILAR TO 'Hello%' as cs
FROM collateTable;
Ergebnisse¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Ausgabecode:
Snowflake¶
CREATE TABLE collateTable (
col1 VARCHAR(20) COLLATE 'en-ci',
col2 VARCHAR(30) COLLATE 'en-cs'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "01/16/2025", "domain": "test" }}';
INSERT INTO collateTable
values ('HELLO WORLD!', 'HELLO WORLD!');
SELECT
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col1, ''), 'Hello.*', 's') as ci,
RLIKE(COLLATE(
--** SSC-FDM-PG0011 - THE USE OF THE COLLATE COLUMN CONSTRAINT HAS BEEN DISABLED FOR THIS PATTERN-MATCHING CONDITION. **
col2, ''), 'Hello.*', 's') as cs
FROM
collateTable;
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 stellt die Angabe der NOT NULL-Einschränkung sicher, dass das Zuweisen eines Nullwerts zu einer Variablen zu einem Laufzeitfehler führt. Da diese Klausel in Snowflake nicht existiert, wird sie während der Umwandlung entfernt, und das Zuweisen eines NULL-Werts zu dieser Variablen führt bei der Ausführung nicht mehr zu einem Fehler.
Codebeispiel¶
Eingabecode:¶
PostgreSql¶
CREATE OR REPLACE PROCEDURE variable_Not_Null()
LANGUAGE plpgsql
AS $$
DECLARE
v_notnull VARCHAR NOT NULL DEFAULT 'Test default';
BEGIN
v_notnull := NULL;
-- Procedure logic
END;
$$;
Ergebnis¶
[22004] ERROR: NULL-Wert kann nicht der Variablen „v_notnull“ zugewiesen werden, die als NOT NULL deklariert wurde.
Generated Code:
Snowflake
CREATE OR REPLACE PROCEDURE variable_Not_Null ()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
DECLARE
--** SSC-FDM-PG0012 - NOT NULL CONSTRAINT HAS BEEN REMOVED. ASSIGNING NULL TO THIS VARIABLE WILL NO LONGER CAUSE A FAILURE. **
v_notnull VARCHAR DEFAULT 'Test default';
BEGIN
v_notnull := NULL;
-- Procedure logic
END;
$$;
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¶
SELECT
LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
employee_name) AS employee_skills
FROM
employees;
Generierter Code:¶
Snowflake¶
SELECT
--** SSC-FDM-PG0013 - FUNCTION SYNTACTICALLY SUPPORTED BY SNOWFLAKE BUT MAY HAVE FUNCTIONAL DIFFERENCES **
LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
employee_name) AS employee_skills
FROM
employees;
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¶
CREATE TABLE PSEUDOTYPES
(
COL1 UNKNOWN
)
Generierter Code:¶
Snowflake¶
CREATE TABLE PSEUDOTYPES (
COL1 TEXT /*** SSC-FDM-PG0014 - UNKNOWN PSEUDOTYPE TRANSFORMED TO TEXT TYPE ***/
)
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: ¶
\set ON_ERROR_STOP TRUE
Generierter Code: ¶
----** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COMMAND OPTION **
--\set ON_ERROR_STOP TRUE
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: ¶
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
Generierter Code: ¶
CREATE TABLE sal_emp (
name text,
pay_by_quarter ARRAY /*** SSC-FDM-PG0016 - STRONGLY TYPED ARRAY 'INTEGER[]' TRANSFORMED TO ARRAY WITHOUT TYPE CHECKING ***/,
schedule ARRAY /*** SSC-FDM-PG0016 - STRONGLY TYPED ARRAY 'TEXT[][]' TRANSFORMED TO ARRAY WITHOUT TYPE CHECKING ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "06/03/2025", "domain": "no-domain-provided" }}';
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: ¶
CREATE OR REPLACE FUNCTION log_user_activity(
user_id_param INT,
action_param TEXT
)
RETURNS VOID AS $$
BEGIN
INSERT INTO user_activity_log (user_id, action, activity_timestamp)
VALUES (user_id_param, action_param, NOW());
END;
$$ LANGUAGE plpgsql;
Generierter Code: ¶
--** SSC-FDM-PG0017 - USER DEFINED FUNCTION THAT RETURNS VOID WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE log_user_activity (
user_id_param INT,
action_param TEXT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "postgresql", "convertedOn": "07/23/2025", "domain": "no-domain-provided" }}'
AS $$
BEGIN
INSERT INTO user_activity_log (user_id, action, activity_timestamp)
VALUES (:user_id_param, : action_param, CURRENT_TIMESTAMP());
END;
$$;
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: ¶
ANALYZE customers (first_name, last_name)
Generierter Code: ¶
----** SSC-FDM-PG0018 - ANALYZE STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--ANALYZE customers (first_name, last_name)
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.