SnowConvert AI - Différences fonctionnelles PostgreSQL¶
Note
SnowConvert AI pour PostgreSQL prend actuellement en charge l’évaluation et la traduction pour les TABLES et les VIEWS. Bien que SnowConvert AI puisse reconnaître d’autres types d’instructions, ces derniers ne sont pas complètement pris en charge.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-PG0001¶
FOUND pourrait avoir un comportement différent dans Snowflake dans certains scénarios.
Gravité¶
Faible
Description¶
La propriété FOUND dans PostgreSQL est une propriété basée sur la dernière requête exécutée. Elle peut être affectée par certaines instructions telles que les boucles INSERT, UPDATE, DELETE, MERGE, SELECTINTO, PERFORM, FETCH et FOR. Pour obtenir plus de détails sur cette propriété, consultez la documentation PostgreSQL.
Dans Snowflake, il n’existe pas de traduction directe pour cette propriété pour les scénarios suivants :
INSERTUPDATEDELETEMERGE
Le code converti correspondra à la propriété SQLFOUND de Snowflake (Voici la documentation), car elle se comporte comme la propriété FOUND de PostgreSQL.
Pour les autres cas tels que :
SELECT INTOPERFORMFETCH
Le code converti correspondra à un UDF personnalisé (IS_FOUND_UDF) qui se comporte comme la propriété FOUND de PostgreSQL.
Cela se produit, car SQLFOUND modifie sa valeur uniquement si au moins une ligne est affectée par la dernière requête exécutée. Si la dernière requête ne modifie aucune ligne, elle ne change pas.
Alors que l’IS_FOUND_UDF ne fonctionne que pour les instructions qui renvoient des lignes, si aucune ligne n’est renvoyée, il renverra FALSE.
Exemple SQLFOUND¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
La dernière requête affecte une table, de sorte que SQLFOUND est le plus proche de la fonctionnalité PostgreSQL.
Exemple IS_FOUND_UDF¶
SELECT SampleColumn FROM SampleTable;
La dernière requête renverra une ligne mais ne modifiera rien, de sorte que l’IS_FOUND_UDF() est le plus proche de la fonctionnalité PostgreSQL.
Code source 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()))
$$;
Exemple de code¶
Instruction Insert :¶
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;
$$;
Instruction Update :¶
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;
$$;
Instruction Delete :¶
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;
$$;
Instruction Merge :¶
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;
$$;
Instruction Select Into¶
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;
$$;
Instruction Perform :¶
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;
$$;
Instruction Fetch :¶
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 converti en varchar.
Description¶
Cet avertissement est ajouté, car le type bpchar (« blank-padded char ») peut présenter une certaine différence d’équivalence fonctionnelle par rapport au type de données varchar dans Snowflake. Cependant, les deux types de données peuvent stocker les valeurs jusqu’à la longueur « n » de caractères et ne consommer le stockage que pour la quantité de données réellement stockées. La principale différence apparaît lorsqu’il y a des espaces vides à la fin des données : bpchar ne les stocke pas, contrairement à Snowflake.
C’est pourquoi nous pouvons utiliser la fonction RTRIM pour que ces espaces vides ne soient pas stockés. Cependant, il peut y avoir des cas où la fonctionnalité n’est pas complètement équivalente.
Exemple de code¶
Code d’entrée :¶
Définition des colonnes¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
Conversion explicite¶
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Code généré :¶
Définition des colonnes¶
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" }}';
Conversion explicite¶
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;
Meilleures pratiques¶
La fonction
rtrimpeut résoudre les différences de stockage si vous ne souhaitez pas que ces espaces vides soient stockés. Ce cas est géré dans la conversion explicite. Cependant, il peut y avoir d’autres scénarios où il doit être géré manuellement. Pour plus d’informations, référez-vous à la documentation de Snowflake sur RTRIM.
SSC-FDM-PG0003¶
Bytea converti en binary
Description¶
Cet avertissement est ajouté, car lorsque le type de données bytea est converti en binary, la limite de taille est considérablement réduite, de 1GB à 8MB.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE tbl(
col BYTEA
);
Code généré :¶
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" }}';
Meilleures pratiques¶
Pour plus d’informations, référez-vous à la documentation de Snowflake sur le type de données binary.
SSC-FDM-PG0004¶
Le format de sortie de la date peut varier.
Description¶
Le format de sortie de la date peut varier en fonction du type Timestamp et du timestamp_output_format utilisés. Consultez la documentation ici.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Code généré :¶
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" }}';
Exemples¶
Exemple avec CREATE TABLE.
Code d’entrée :¶
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;
Résultats¶
platform_id |
dt_update |
clock_timestamp |
|---|---|---|
1 |
2023-02-05 22:47:34.275 -0600 |
2023-02-05 23:16:15.754 -0600 |
Code généré :¶
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;
Résultats¶
PLATFORM_ID |
DT_UPDATE |
CURRENT_TIMESTAMP(3) |
|---|---|---|
1 |
2023-02-05 20:52:30.082000000 |
2023-02-05 21:20:31.593 |
Exemple avec SELECT avec clock_timestamp().
Code d’entrée¶
PostgreSQL¶
select clock_timestamp();
Résultats¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Code généré¶
Snowflake¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
Résultats¶
CURRENT_TIMESTAMP(3) |
|---|
2023-02-05 21:29:24.258 |
SSC-FDM-PG0005¶
La table UNLOGGED n’est pas prise en charge dans Snowflake. Les données écrites peuvent avoir des performances différentes.
Description¶
Les tables UNLOGGED de PostgreSQL offrent un avantage significatif en matière de vitesse en ignorant la journalisation anticipée (WAL). Cependant, leurs données ne sont pas répliquées vers des instances en miroir. Snowflake ne prend pas en charge cette fonctionnalité, de sorte que la clause UNLOGGED sera commentée.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
CREATE UNLOGGED TABLE TABLE1 (
COL1 integer
);
Code généré :¶
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¶
Définir un chemin de recherche avec plusieurs schémas
Description¶
La définition d’un chemin de recherche avec plusieurs schémas n’est pas prise en charge dans Snowflake. Vous pouvez consulter la documentation ici.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
SET SEARCH_PATH TO schema1, schema2, schema3;
Code généré :¶
Snowflake¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
SSC-FDM-PG0007¶
NULL est converti en “” et peut avoir un comportement différent dans Snowflake.
Gravité¶
Faible
Description¶
Dans PostgreSQL, la suppression d’un commentaire est gérée en utilisant le terme NULL. Cependant, dans Snowflake, une méthode similaire pour supprimer un commentaire consiste à attribuer la valeur d’une chaîne vide '' pour fournir le même résultat. Cette approche garantit que le commentaire est effectivement mappé à une chaîne vide avec un comportement similaire.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
COMMENT ON TABLE mytable IS NULL;
Code généré :¶
Snowflake¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
SSC-FDM-PG0008¶
Les sélections dans des tables non journalisées ne sont pas prises en charge par Snowflake.
Description¶
Select Into n’est pas pris en charge par Snowflake. Cette fonctionnalité a été émulée avec CREATE TABLE AS. En outre, Snowflake utilise toujours les journaux des transactions pour protéger les tables et garantir l’intégrité et la récupération des données. Par conséquent, les tables avec l’option UNLOGGED ne sont pas prises en charge par Snowflake.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
select column1
into UNLOGGED NewTable
from oldTable;
Code généré :¶
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¶
La propriété de séquence nextval ne garantit pas la génération de numéros de séquence sans espaces.
Description¶
Snowflake ne garantit pas la génération de numéros de séquence sans espaces. Les nombres générés augmentent systématiquement en valeur (ou diminuent en valeur si la taille de l’étape est négative), mais ne sont pas nécessairement contigus.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
SELECT nextval('seq1');
Code généré :¶
Snowflake¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
SSC-FDM-PG0010¶
Les résultats peuvent varier selon le comportement de la fonction bitwise de Snowflake.
Description¶
Les opérateurs bitwise << and >> sont convertis en fonctions Snowflake BITSHIFTLEFT et BITSHIFTRIGHT correspondantes. Toutefois, en raison des différences dans la manière dont ces fonctions gèrent les expressions, les résultats peuvent différer de ceux dans PostgreSQL.
Exemple de code¶
Code d’entrée :¶
PostgreSql¶
SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Résultat¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-2147483648 |
16 |
Code généré :¶
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;
Résultat¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-170141183460469231731687303715884105728 |
0 |
SSC-FDM-PG0011¶
L’utilisation de la contrainte de colonne COLLATE a été désactivée pour cette condition de correspondance de modèles.
Description¶
Ce message est ajouté lorsqu’une condition de correspondance de modèles utilise des arguments avec des spécifications COLLATE, car elles ne sont pas actuellement prises en charge dans la fonction d’expression régulière de Snowflake. Par conséquent, la clause COLLATE doit être désactivée pour utiliser cette fonction, ce qui peut entraîner des différences dans les résultats.
Exemple de code¶
Code d’entrée :¶
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;
Résultats¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Code de sortie :
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;
Résultats¶
CI |
CS |
|---|---|
FALSE |
FALSE |
Meilleures pratiques¶
Si vous avez besoin d’une équivalence pour ces scénarios, vous pouvez ajouter manuellement les paramètres suivants à la fonction pour obtenir l’équivalence fonctionnelle :
Paramètre
Description
cCorrespondance sensible à la casse
iCorrespondance non sensible à la casse
Pour plus d’informations, veuillez vous référer au [lien] suivant(https://docs.snowflake.com/fr/sql-reference/functions-regexp#specifying-the-parameters-for-the-regular-expression).
SSC-FDM-PG0012¶
La contrainte NOT NULL a été supprimée. Attribuer NULL à cette variable ne provoquera plus d’échec.
Description¶
Dans PostgreSql, spécifier la contrainte NOT NULL garantit que l’attribution d’une valeur nulle à une variable entraîne une erreur d’exécution. Comme cette clause n’existe pas dans Snowflake, elle est supprimée lors de la transformation, et l’attribution de NULL à cette variable ne provoquera plus d’échec à l’exécution.
Exemple de code¶
Code d’entrée :¶
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;
$$;
Résultat¶
[22004] ERROR: NULL ne peut pas être attribué à la variable « v_notnull » déclarée NOT NULL.
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
Remarque
Cette attribution n’échouera pas dans Snowflake.
Meilleures pratiques¶
Examinez la logique de la procédure pour vous assurer qu’aucune valeur
NULLn’est attribuée à cette variable.
SSC-FDM-PG0013¶
Fonction syntaxiquement prise en charge par Snowflake, mais pouvant présenter des différences fonctionnelles
Description¶
Ce message de différence fonctionnelle indique que si Snowflake prend en charge la syntaxe de la fonction (directement ou via un mappage équivalent), son comportement peut être différent du comportement d’origine dans certaines situations.
Exemple de code¶
Code d’entrée :¶
PostgreSql¶
SELECT
LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
employee_name) AS employee_skills
FROM
employees;
Code généré :¶
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;
Meilleures pratiques¶
Évaluez soigneusement le comportement fonctionnel pour les résultats inattendus, car les différences ne peuvent se produire que dans des scénarios spécifiques.
SSC-FDM-PG0014¶
Unknown Pseudo Type transformé en Text Type
Description¶
Ce message de différence fonctionnelle indique que UNKNOWN Pseudo Type utilisé dans PostgreSQL n’est pas pris en charge dans Snowflake et est transformé en Text Type.
Exemple de code¶
Code d’entrée :¶
PostgreSql¶
CREATE TABLE PSEUDOTYPES
(
COL1 UNKNOWN
)
Code généré :¶
Snowflake¶
CREATE TABLE PSEUDOTYPES (
COL1 TEXT /*** SSC-FDM-PG0014 - UNKNOWN PSEUDOTYPE TRANSFORMED TO TEXT TYPE ***/
)
Meilleures pratiques¶
Évaluez soigneusement les utilisations des colonnes avec Unknown Data Types, car des différences peuvent se produire dans des scénarios spécifiques.
SSC-FDM-PG0015¶
La commande PSQL n’est pas applicable dans Snowflake.
Description¶
Dans Snowflake, les commandes PSQL ne sont pas applicables. Bien que n’étant plus nécessaire pour l’exécution, SnowConvert AI conserve la commande PSQL d’origine sous forme de commentaire.
Exemple de code¶
Code d’entrée:�¶
\set ON_ERROR_STOP TRUE
Code généré: ¶
----** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COMMAND OPTION **
--\set ON_ERROR_STOP TRUE
SSC-FDM-PG0016¶
Tableau fortement typé transformé en ARRAY sans vérification de type.
Description¶
SnowConvert AI ajoutera cet avertissement, car PostgreSQL prend en charge les tableaux de tout type base, type enum, type composite, type plage ou domaine intégré ou défini par l’utilisateur, tandis que Snowflake ne le fait pas. Dans Snowflake, chaque valeur d’un tableau semi-structuré est de type VARIANT.
Exemple de code¶
Code d’entrée:�¶
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
Code généré: ¶
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¶
La fonction définie par l’utilisateur qui renvoie void a été transformée en procédure Snowflake.
Description¶
SnowConvert AI génère un avertissement pour toute fonction qui renvoie void. En effet, les fonctions renvoyant void indiquent généralement une procédure plutôt qu’une opération produisant une valeur, ce qui peut parfois nécessiter un traitement spécial lors de la conversion.
Exemple de code¶
Code d’entrée:�¶
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;
Code généré: ¶
--** 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¶
L’instruction d’analyse est commentée, ce qui n’est pas applicable dans Snowflake.
Description¶
SnowConvert AI signale les instructions ANALYZE avec un avertissement et les commentent. Alors que ANALYZE est utilisé dans PostgreSQL pour collecter des statistiques de table, Snowflake gère automatiquement ce processus, rendant l’instruction redondante et généralement inutile après la conversion.
Exemple de code¶
Code d’entrée:�¶
ANALYZE customers (first_name, last_name)
Code généré: ¶
----** SSC-FDM-PG0018 - ANALYZE STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--ANALYZE customers (first_name, last_name)
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.