SnowConvert: Funktionale Unterschiede in PostgreSQL

SSC-FDM-PG0001

Schweregrad

Niedrig

Beschreibung

Die Eigenschaft FOUND in PostgreSQL zeigt an, ob die letzte Abfrage zu einem Ergebnis geführt hat. Diese Eigenschaft kann durch verschiedene SQL-Befehle geändert werden, darunter INSERT, UPDATE, DELETE, MERGE, SELECT INTO, PERFORM, FETCH und FOR-Schleifen. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation.

In Snowflake gibt es in keinem Szenario eine direkte Entsprechung für diese Eigenschaft.

  • INSERT

  • UPDATE

  • DELETE

  • MERGE

Der Code wird in die Snowflake-Eigenschaft SQLFOUND konvertiert(Hier ist die Dokumentation), die ähnlich funktioniert wie die PostgreSQL-Eigenschaft FOUND.

  • SELECT INTO: Ruft Daten aus einer Abfrage ab und speichert sie in Variablen

  • PERFORM: Führt eine Abfrage aus und verwirft die Ergebnisse

  • FETCH: Ruft in Variablen Zeilen aus einem Cursor ab

Der Code erstellt eine benutzerdefinierte Funktion (User-Defined Function, UDF) mit dem Namen IS_FOUND_UDF, die die Funktionalität der Eigenschaft FOUND von PostgreSQL repliziert.

Die Variable SQLFOUND aktualisiert ihren Wert nur, wenn eine Abfrage mindestens eine Zeile in der Datenbank ändert. Wenn die letzte Abfrage keine Zeilen geändert hat, bleibt der Wert von SQLFOUND unverändert.

Die Funktion IS_FOUND_UDF gibt TRUE nur zurück, wenn die Anweisung eine oder mehrere Zeilen zurückgibt. Wenn die Anweisung keine Zeilen zurückgibt, gibt die Funktion FALSE zurück.

SQLFOUND-Beispiel
 INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
Copy

Da diese Abfrage eine Tabelle verändert, bietet SQLFOUND eine Funktionalität, die dem Verhalten von PostgreSQL am nächsten kommt.

Beispiel für IS_FOUND\_UDF
 SELECT SampleColumn FROM SampleTable;
Copy

Die Funktion IS_FOUND_UDF() kommt dem Verhalten von PostgreSQL am nächsten, da sie eine Zeile zurückgibt, ohne die Daten zu ändern.

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()))
$$;
Copy

Codebeispiel

INSERT-Anweisung:
 -- Found property used with INSERT statement.
CREATE OR REPLACE FUNCTION FoundUsingInsertFunction()
RETURNS BOOLEAN
AS
$$
  BEGIN
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');
    RETURN FOUND;
  END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with INSERT statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingInsertFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
  BEGIN
    INSERT INTO SampleTable (SampleColumn1)
    VALUES ('SampleValue0.1');
    RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
  END;
$$;
Copy
UPDATE-Anweisung
 -- Found property used with UPDATE statement.
CREATE OR REPLACE FUNCTION FoundUsingUpdateFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        UPDATE SampleTable 
        SET SampleColumn1 = 'SampleValue0.1' 
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with UPDATE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingUpdateFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        UPDATE SampleTable
        SET SampleColumn1 = 'SampleValue0.1'
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
DELETE-Anweisung
 -- Found property used with DELETE statement.
CREATE OR REPLACE FUNCTION FoundUsingDeleteFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        DELETE FROM SampleTable 
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with DELETE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingDeleteFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        DELETE FROM
            SampleTable
        WHERE SampleColumn1 = 'SampleValue0.1';
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
MERGE-Anweisung
 -- Found property used with MERGE statement.
CREATE OR REPLACE FUNCTION FoundUsingMergeFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        MERGE INTO SampleTableB B
        USING (SELECT * FROM SampleTableA) A
        ON B.SampleColumn1 = A.SampleColumn2
        WHEN MATCHED THEN DELETE;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with MERGE statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingMergeFunction ()
RETURNS BOOLEAN
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 ***/!!!;
        RETURN SQLFOUND /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
SELECT INTO-Anweisung
 -- Found property used with SELECT INTO statement.
CREATE OR REPLACE FUNCTION FoundUsingSelectIntoFunction()
RETURNS BOOLEAN
AS
$$
    DECLARE 
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO SampleNumber;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with SELECT INTO statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingSelectIntoFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    DECLARE
        SampleNumber INTEGER;
    BEGIN
        SELECT 1 INTO
            : SampleNumber;
        RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
EXECUTE-Anweisung:
 -- Found property used with PERFORM statement.
CREATE OR REPLACE FUNCTION FoundUsingPerformFunction()
RETURNS BOOLEAN
AS
$$
    BEGIN
        PERFORM 1;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with PERFORM statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingPerformFunction ()
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
    BEGIN
        SELECT
            1;
        RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
    END;
$$;
Copy
FETCH-Anweisung:
 -- Found property used with FETCH statement.
CREATE OR REPLACE FUNCTION FoundUsingFetchFunction ()
RETURNS BOOLEAN
AS
$$
    DECLARE
        SampleRow VARCHAR;
        SampleCursor CURSOR FOR SELECT EmptyColumn FROM EmptyTable;
    BEGIN
        OPEN SampleCursor;
        FETCH SampleCursor;
        CLOSE SampleCursor;
        RETURN FOUND;
    END;
$$
LANGUAGE plpgsql;
Copy
 -- Found property used with FETCH statement.
!!!RESOLVE EWI!!! /*** SSC-EWI-GP0003 - RETURNING FUNCTION TRANSLATED TO STORED PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FoundUsingFetchFunction ()
RETURNS BOOLEAN
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;
       RETURN FOUND_UDF() /*** SSC-FDM-PG0001 - FOUND COULD HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE IN SOME SCENARIOS. ***/;
   END;
$$;
Copy

Best Practices

SSC-FDM-PG0002

Beschreibung

Diese Warnung erscheint, weil sich der Datentyp bpchar (blank-padded char) in Snowflake möglicherweise anders verhält als varchar. Beide Datentypen können zwar bis zu n Zeichen speichern und verwenden Speicherplatz auf der Grundlage der tatsächlichen Datenlänge, aber sie behandeln nachstehende Leerzeichen unterschiedlich. Bei bpchar werden nachstehende Leerzeichen nicht gespeichert, während sie bei varchar von Snowflake erhalten bleiben.

Um die Speicherung unnötiger Leerzeichen zu vermeiden, können Sie die Funktion RTRIM verwenden. Beachten Sie jedoch, dass dies in manchen Fällen nicht genau die gleiche Funktionalität wie der ursprüngliche Code bietet.

Codebeispiel

Eingabecode:
 CREATE TABLE table1 (
    col1 BPCHAR, 
    col2 BPCHAR(20)
);
Copy
SELECT 'Y'::BPCHAR;

SELECT 'Y   '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Copy
Generierter Code:
 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" }}';
Copy
 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;
Copy

Best Practices

  • Die Funktion rtrim entfernt nachstehende Leerzeichen, was bei der Auflösung von Speicherunterschieden hilfreich sein kann. Während die explizite Umwandlung dies automatisch erledigt, müssen Sie in anderen Situationen möglicherweise rtrim manuell verwenden. Erfahren Sie mehr über rtrim in der Snowflake RTRIM-Dokumentation.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-PG0003

Beschreibung

Diese Warnung weist darauf hin, dass die Konvertierung von Daten vom aus dem bytea-Format in das Binärformat die maximale Größenbeschränkung erheblich reduziert, nämlich von 1 Gigabyte (GB) auf 8 Megabyte (MB).

Codebeispiel

Eingabecode:
CREATE TABLE tbl(
    col BYTEA
);
Copy
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" }}';
Copy

Best Practices

SSC-FDM-PG0004

Beschreibung

Das Format der Datumsausgabe hängt von zwei Faktoren ab: dem Zeitstempeltyp und der Einstellung für timestamp_output_format. Weitere Einzelheiten entnehmen Sie bitte der Snowflake-Dokumentation.

Codebeispiel

Eingabecode:
 CREATE TABLE table1 (
    dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Copy
Generierter Code:
 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" }}';
Copy

Beispiele

Tabellen erstellen: Ein grundlegendes Beispiel

Dieses Beispiel zeigt Ihnen, wie Sie eine Tabelle in Ihrer Datenbank erstellen.

Eingabecode:

 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;
Copy
 platform_id|dt_update                    |clock_timestamp              |
-----------+-----------------------------+-----------------------------+
          1|2023-02-05 22:47:34.275 -0600|2023-02-05 23:16:15.754 -0600|
Copy
Generierter Code:
 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;
Copy
 PLATFORM_ID   DT_UPDATE	                        CURRENT_TIMESTAMP(3)
1	      2023-02-05 20:52:30.082000000	2023-02-05 21:20:31.593
Copy

Verwendung von SELECT mit clock_timestamp() – Beispiel

Eingabecode
 select clock_timestamp();
Copy
 clock_timestamp        |
-----------------------+
2023-02-05 23:24:13.740|
Copy
Ausgabecode
 ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
    CURRENT_TIMESTAMP(3);
Copy
 CURRENT_TIMESTAMP(3)
2023-02-05 21:29:24.258
Copy

Best Practices

SSC-FDM-PG0006

Beschreibung

Das Festlegen mehrerer Schemas in einem Suchpfad wird in Snowflake nicht unterstützt. Weitere Informationen zur Verwendung von Schemas finden Sie in der Snowflake-Dokumentation.

Codebeispiel

Eingabecode:
 SET SEARCH_PATH TO schema1, schema2, schema3;
Copy
Generierter Code:
 --** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Copy

Best Practices

SSC-FDM-PG0007

Schweregrad

Niedrig

Beschreibung

Um einen Kommentar in PostgreSQL zu entfernen, verwenden Sie NULL. In Snowflake sollten Sie jedoch stattdessen eine leere Zeichenfolge ( ) verwenden. Beide Methoden führen zu demselben Ergebnis, nämlich der Entfernung des Kommentars.

Codebeispiel

Eingabecode:
 COMMENT ON TABLE mytable IS NULL;
Copy
Generierter Code:
 COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Copy

Best Practices

SSC-FDM-PG0008

Beschreibung

Die Anweisung SELECT INTO ist in Snowflake nicht verfügbar. Stattdessen können Sie CREATE TABLE AS verwenden, um eine ähnliche Funktionalität zu erreichen. Darüber hinaus verwaltet Snowflake automatisch Transaktionsprotokolle für alle Tabellen, um die Integrität der Daten und die Wiederherstellungsmöglichkeiten zu gewährleisten. Aus diesem Grund werden Tabellen mit der Option UNLOGGED in Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
 select column1
      into UNLOGGED NewTable
      from oldTable;
Copy
Ausgabecode:
 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;
Copy

Best Practices

SSC-FDM-PG0009

Beschreibung

Die Sequenznummern von Snowflake können Lücken aufweisen. Die Zahlen werden zwar immer größer (oder kleiner, wenn Sie eine negative Schrittgröße verwenden), aber sie sind nicht unbedingt aufeinanderfolgend.

Codebeispiel

Eingabecode:
 SELECT nextval('seq1');
Copy
Ausgabecode:
 SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Copy

Empfehlungen

SSC-FDM-PG0010

Beschreibung

Die PostgreSQL-Operatoren für die bitweise Verschiebung << und >> werden in die Snowflake-Funktionen BITSHIFTLEFT und BITSHIFTRIGHT übersetzt. Bitte beachten Sie, dass diese Funktionen in Snowflake aufgrund von Unterschieden in der Behandlung von Ausdrücken andere Ergebnisse liefern können als in PostgreSQL.

Codebeispiel

Eingabecode:
 SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Copy

resultShiftedLeft

resultShiftedRight

-2147483648

16

Ausgabecode:
 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;
Copy

resultShiftedLeft

resultShiftedRight

-170141183460469231731687303715884105728

0

Empfehlungen

SSC-FDM-PG0011

Beschreibung

Diese Meldung erscheint, wenn der Musterabgleich COLLATE-Angaben in seinen Argumenten enthält. Da die Funktion für reguläre Ausdrücke von Snowflake keine COLLATE-Angaben unterstützt, muss die COLLATE-Klausel entfernt werden. Bitte beachten Sie, dass das Entfernen dieser Klausel zu anderen Ergebnissen als in der Quelldatenbank führen kann.

Codebeispiel

Eingabecode:
 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;
Copy

CI

CS

TRUE

FALSE

Ausgabecode:

 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": "redshift",  "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;
Copy

CI

CS

FALSE

FALSE

Empfehlungen

  • Um in diesen Szenarien funktionale Gleichwertigkeit zu erreichen, können Sie diese Parameter manuell zur Funktion hinzufügen:

| Parameter | Description | | ——— | ————————- | | c | Case-sensitive matching | | i | Case-insensitive matching |

SSC-FDM-PG0012

Beschreibung

Wenn eine Variable in Redshift mit NOT NULL markiert ist, führt der Versuch, einen Nullwert zuzuweisen, zu einem Laufzeitfehler. Snowflake unterstützt diese Einschränkung jedoch nicht. Während des Migrationsprozesses wird die NOT NULL-Klausel entfernt, was bedeutet, dass die Zuweisung von NULL-Werten zu Variablen erlaubt ist und während der Ausführung keine Fehler erzeugt.

Codebeispiel

Eingabecode:
 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;
$$;
Copy

[22004] ERROR: Der Variablen „v_notnull“ kann kein NULL-Wert zugewiesen werden, da sie mit einer NOT NULL-Einschränkung deklariert wurde.

Ausgabecode:
 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;
$$;
Copy

Diese Operation wird in Snowflake erfolgreich ausgeführt.

Recommendations

  • Überprüfen Sie, ob die Logik der Prozedur verhindert, dass dieser Variablen ein NULL-Wert zugewiesen wird.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com