SnowConvert AI – PostgreSQL-Probleme

Bemerkung

Konvertierungsbereich

SnowConvert AI für PostgreSQL konzentriert seine Bewertungs- und Übersetzungsmöglichkeiten in erster Linie auf TABLES und VIEWS. Obwohl SnowConvert AI andere Arten von ANSI-Standardanweisungen erkennen kann, werden diese derzeit noch nicht vollständig für die Konvertierung unterstützt. Das bedeutet, dass das Tool sie zwar identifiziert, aber keine vollständige Übersetzung für diese nicht unterstützten Codeeinheiten durchführt.

SSC-EWI-PG0001

Alter wird bei Snowflake nicht unterstützt

Schweregrad

Medium

Beschreibung

Dieser Fehler wurde hinzugefügt, weil SnowConvert AI die Funktion age() nicht unterstützt.

Codebeispiel

Eingabecode:
PostgreSQL
 SELECT
   age(date1::date, date2::date)
FROM
   Table1;
Copy
Generierter Code:
Snowflake
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "age", "Table1" **
SELECT
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0001 - AGE IS NOT SUPPORTED ON SNOWFLAKE. ***/!!!
   AGE(date1::date, date2::date)
FROM
   Table1;
Copy

Best Practices

  • Die Datediff-Zeitfunktion kann einige Fälle lösen, in denen das Ziel der Abfrage darin besteht, einen bestimmten Wertebereich zu erhalten, aber dies muss für jedes Szenario manuell gehandhabt werden. Weitere Informationen dazu finden Sie in der Snowflake-Dokumentation zu Datediff.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-PG0002

Einschränkungsindexparameter nicht unterstützt

Schweregrad

Niedrig

Beschreibung

Die Verwendung der folgenden Indexparameter in Einschränkungen wird von Snowflake nicht unterstützt.

  • INCLUDE

  • WITH

  • USING INDEX TABLESPACE

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE TABLE Table1 (
    code        char(5),
    date_prod   date,
    CONSTRAINT production UNIQUE(date_prod) INCLUDE(code)
);

CREATE TABLE Table2 (
    name    varchar(40),
    UNIQUE(name) WITH (fillfactor=70)
);

CREATE TABLE Table3 (
    name    varchar(40),
    PRIMARY KEY(name) USING INDEX TABLESPACE tablespace_name
);
Copy
Generierter Code:
Snowflake
 CREATE TABLE Table1 (
    code        char(5),
    date_prod   date,
    CONSTRAINT production UNIQUE(date_prod)
                                            !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - INCLUDE PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! INCLUDE(code)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';

CREATE TABLE Table2 (
    name    varchar(40),
    UNIQUE(name)
                 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - WITH PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! WITH (fillfactor=70)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';

CREATE TABLE Table3 (
    name    varchar(40),
    PRIMARY KEY(name)
                      !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - USING PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! USING INDEX TABLESPACE tablespace_name
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Best Practices

SSC-EWI-PG0003

Erben nicht unterstützt

Schweregrad

Niedrig

Beschreibung

Erben zwischen Tabellen ist in PostgreSQL erlaubt, aber Snowflake unterstützt dies nicht. Weitere Informationen zum Erben in PostgreSQL finden Sie hier.

Codebeispiel

Eingabecode:
PostgreSQL
 ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy
Generierter Code:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0003 - TABLE INHERITANCE IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy

Best Practices

SSC-EWI-PG0004

Ausschlusseinschränkung wird nicht unterstützt

Schweregrad

Medium

Beschreibung

Die in PostgreSQL verwendete Ausschlusseinschränkung wird von Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE TABLE Table1 (
    id      int,
    EXCLUDE USING gist (id WITH &&)
);
Copy
Generierter Code:
Snowflake
 CREATE TABLE Table1 (
    id      int,
    !!!RESOLVE EWI!!! /*** SSC-EWI-PG0004 - EXCLUDE CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
    EXCLUDE USING gist (id WITH &&)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Best Practices

SSC-EWI-PG0006

Das Referenzieren einer Variablen über das Label wird von Snowflake nicht unterstützt.

Schweregrad

Medium

Beschreibung

Dieser Fehler wird hinzugefügt, wenn der Text eines FOR-Loops eine Variable unter Verwendung des Labels referenziert. Snowflake unterstützt das Referenzieren einer Variable über den qualifizierten Namen nicht.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE OR REPLACE PROCEDURE procedure1(out result VARCHAR(100))
LANGUAGE plpgsql
AS $$
BEGIN
result := '<';
<<outer_loop>>
for i in 1..3 loop
  <<inner_loop>>
  for i in 4..6 loop
  result := result || '(' || outer_loop.i || ', ' || i || ')';
  end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
Copy
Generierter Code:
Snowflake
 CREATE OR REPLACE PROCEDURE procedure1 (result OUT VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
result := '<';
for i in 1 TO 3
                --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                loop
  for i in 4 TO 6
                  --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                  loop
  result := result || '(' ||
                             !!!RESOLVE EWI!!! /*** SSC-EWI-PG0006 - REFERENCE TO A VARIABLE USING THE LABEL IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! outer_loop.i || ', ' || i || ')';
  end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
Copy

Best Practices

SSC-EWI-PG0007

„Into“-Klausel von Dynamic SQL wird in Snowflake nicht unterstützt

Schweregrad

Niedrig

Beschreibung

PostgreSQL Dynamic-SQL erlaubt die INTO-Klausel zum Speichern von Abfrageergebnissen in Variablen. Snowflake unterstützt diese Funktion nicht. Daher ist die INTO-Klausel mit einem EWI gekennzeichnet.

Codebeispiel

Eingabecode:
PosgreSQL
 CREATE OR REPLACE PROCEDURE get_max_id(table_name VARCHAR, OUT max_id INTEGER)
AS $$
DECLARE
    sql_statement VARCHAR;
BEGIN
    sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
    EXECUTE sql_statement INTO max_id;
END;
$$ LANGUAGE plpgsql;
Copy
Generierter Code:
Snowflake
 CREATE OR REPLACE PROCEDURE get_max_id (table_name VARCHAR, max_id OUT INTEGER)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
DECLARE
    sql_statement VARCHAR;
BEGIN
    sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
    EXECUTE IMMEDIATE sql_statement
                                    !!!RESOLVE EWI!!! /*** SSC-EWI-PG0007 - INTO CLAUSE IN DYNAMIC SQL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! INTO max_id;
END;
$$;
Copy

Best Practices

SSC-EWI-PG0008

Die Verwendung von „interval“ innerhalb einer „to_char“-Funktion ist nicht mit Snowflake kompatibel.

Schweregrad

Hoch

Beschreibung

Die Verwendung von intervall innerhalb von to_char zum Konvertieren von Datums-/Uhrzeitdatentypen in Text wird von Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
PostgreSQL
 SELECT to_char(interval '15h 2m 12s', 'HH24:MI:SS');
Copy
Generierter Code:
Snowflake
 SELECT to_char(INTERVAL '15h, 2m, 12s', 'HH24:MI:SS') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0008 - THE USE OF INTERVAL WITHIN TO_CHAR IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!;
Copy

Weitere Informationen dazu finden Sie unter

Best Practices

SSC-EWI-PG0009

Der Kommentar zu „Typ“ wird von Snowflake nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Im ursprünglichen Code gibt es verschiedene Objekte, die Kommentare erhalten können. In Snowflake sind einige dieser Objekte jedoch nicht vorhanden, sodass ihnen keine Kommentare zugewiesen werden können. Der Code zur Behandlung dieser Szenarios ist auskommentiert, um mögliche Fehler zu vermeiden.

Codebeispiel

Eingabecode:
PostgreSql
 COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
Copy
Generierter Code:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0009 - COMMENT ON 'RULE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
Copy

Best Practices

SSC-EWI-PG0010

Das Erstellen einer temporären Sequenz wird von Snowflake nicht unterstützt

Schweregrad

Niedrig

Beschreibung

Wenn in PostgreSQL eine temporäre Sequenz erstellt wird, wird sie nur für die aktive Sitzung erstellt und automatisch gelöscht, wenn Sie sich von der Sitzung abmelden. Diese Funktion ist jedoch in Snowflake nicht verfügbar, sodass sie als normale Sequenz generiert wird. Bei der Ausführung kann ein ähnlicher Sequenzname bereits existieren, was zu einem Fehler bei einem vorhandenen Objekt führt.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE TEMPORARY SEQUENCE sequence1;
CREATE TEMP SEQUENCE sequence2;
Copy
Generierter Code:
Snowflake
 --** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE TEMPORARY !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence1;


--** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
 CREATE TEMP !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence2;
Copy

Best Practices

  • Wenn Sie ein Problem mit der Erstellung haben, können Sie versuchen, die Sequenz umzubenennen, um Kollisionen zu vermeiden.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-PG0011

Die Sequenzoption „option_name“ wird von Snowflake nicht unterstützt.

Schweregrad

Niedrig

Beschreibung

Einige Optionen, die in PostgreSQL für die Sequenzanweisung verfügbar sind, werden von Snowflake nicht unterstützt.

Folgende Optionen werden nicht unterstützt:

  • Nicht protokolliert.

  • AS <data_type>.

  • MinValue.

  • MaxValue.

  • Nein MinValue.

  • Nein MaxValue.

  • Cache.

  • Zyklus.

  • Eigentümer.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE UNLOGGED SEQUENCE sequence_name;
Copy
Generierter Code:
Snowflake
 --** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE UNLOGGED !!!RESOLVE EWI!!! /*** SSC-EWI-PG0011 - 'UNLOGGED' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence_name;
Copy

Best Practices

SSC-EWI-PG0012

NOT VALID-Einschränkungsoption wird von Snowflake nicht unterstützt.

Beschreibung

Die Option NOT VALID für Constraints wird im Zusammenhang mit dem Hinzufügen oder Ändern einer Einschränkung verwendet und gibt an, dass die Einschränkung hinzugefügt oder geändert werden soll, ohne die vorhandenen Daten auf die Einhaltung der Einschränkung zu überprüfen. Diese Klausel wird von Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
PostgreSQL
 ALTER TABLE Table1 *
ADD CONSTRAINT const UNIQUE (zip) NOT VALID;
Copy
Generierter Code:
Snowflake
 ALTER TABLE Table1
ADD CONSTRAINT const UNIQUE (zip)
                                  !!!RESOLVE EWI!!! /*** SSC-EWI-PG0012 - NOT VALID CONSTRAINT OPTION IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! NOT VALID;
Copy

Best Practices

  • Es sind keine weiteren Aktionen des Benutzers erforderlich.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

SSC-EWI-PG0014

Snowflake Scripting-Cursors unterstützen keine Fetch-Ausrichtung

Schweregrad

Medium

Beschreibung

In Snowflake ruft die FETCH Cursor-Anweisung immer die nächste Zeile im Cursor ab. Beim Transformieren des Codes wandelt SnowConvert AI Cursor-Ausrichtungen um, die FETCH NEXT entsprechen, da sie in Snowflake funktional gleichwertig sind:

  • FETCH NEXT

  • FETCH FORWARD

  • FETCH RELATIVE 1

  • FETCH (keine Ausrichtung angegeben)

Jede andere Ausrichtung wird nicht unterstützt, und die FETCH-Anweisung wird mit diesem EWI gekennzeichnet, um dies widerzuspiegeln.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE OR REPLACE PROCEDURE cursor_test()
AS $$
BEGIN
   FETCH FORWARD FROM cursor1 INTO my_var;
   FETCH FIRST FROM cursor1 INTO my_var;
   FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
Copy
Generierter Code:
Snowflake
 CREATE OR REPLACE PROCEDURE cursor_test ()
RETURNS VARCHAR
AS $$
BEGIN
   FETCH
   	cursor1 INTO my_var;
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
   FETCH FIRST FROM cursor1 INTO my_var;
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
   FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
Copy

Best Practices

SSC-EWI-PG0015

Fetch cursor ohne Zielvariablen wird in Snowflake nicht unterstützt

Schweregrad

Medium

Beschreibung

In PostgreSQL ist es möglich, eine [FETCH-Anweisung] (https://www.postgresql.org/docs/current/sql-fetch.html) ohne INTO zu verwenden, um die Werte der abgeholten Zeilen auf der Konsole auszugeben. Snowflake erfordert jedoch, dass die FETCH-Anweisung die INTO-Klausel angibt, in der die Variablen definiert sind, in denen die abgeholten Zeilenwerte gespeichert werden.

Immer wenn ein FETCH ohne INTO im Code gefunden wird, erzeugt SnowConvert AI diese EWI, um den Benutzer darauf hinzuweisen, dass diese Art von FETCH nicht unterstützt wird.

Codebeispiel

Eingabecode:
PostgreSQL
 FETCH PRIOR FROM cursor1;
Copy
Generierter Code:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FETCH PRIOR FROM cursor1;
Copy

Best Practices

SSC-EWI-PG0016

Bit-Zeichenfolgentyp, der in Varchar-Typ konvertiert wurde

Schweregrad

Niedrig

Beschreibung

Beim Migrieren von PostgreSQL ist zu beachten, dass dessen BIT-String-Typen und die damit verbundenen Funktionen in Snowflake nicht nativ unterstützt werden. Diese Datentypen werden in den VARCHAR von Snowflake konvertiert. Diese Umwandlung bedeutet, dass alle PostgreSQL-Abfragen oder Anwendungslogiken, die von bitweisen Operationen auf diesen Spalten abhängen, erheblich angepasst werden müssen, um in Snowflake die gleiche Funktionalität zu erreichen.

Codebeispiel

Eingabecode:
PostgreSQL
 CREATE TABLE table1 (
   col1 bit(10)
);
Copy
Generierter Code:
Snowflake
 CREATE TABLE table1 (
   col1 CHARACTER(10) !!!RESOLVE EWI!!! /*** SSC-EWI-PG0016 - BIT DATA TYPE CONVERTED TO CHARACTER ***/!!!
);
Copy

Best Practices