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¶
La dernière requête affecte une table, de sorte que SQLFOUND est le plus proche de la fonctionnalité PostgreSQL.
Exemple IS_FOUND_UDF¶
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¶
Exemple de code¶
Instruction Insert :¶
PostgreSQL¶
Snowflake¶
Instruction Update :¶
PostgreSQL¶
Snowflake¶
Instruction Delete :¶
PostgreSQL¶
Snowflake¶
Instruction Merge :¶
PostgreSQL¶
Snowflake¶
Instruction Select Into¶
PostgreSQL¶
Snowflake¶
Instruction Perform :¶
PostgreSQL¶
Snowflake¶
Instruction Fetch :¶
PostgreSQL¶
Snowflake¶
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¶
Conversion explicite¶
Code généré :¶
Définition des colonnes¶
Conversion explicite¶
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 :¶
Code généré :¶
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¶
The date output format may vary depending on the Timestamp type and the timestamp_output_format being used, see the Snowflake CURRENT_TIMESTAMP documentation.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
Code généré :¶
Snowflake¶
Exemples¶
Exemple avec CREATE TABLE.
Code d’entrée :¶
PostgreSQL¶
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¶
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¶
Résultats¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Code généré¶
Snowflake¶
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¶
Code généré :¶
Snowflake¶
SSC-FDM-PG0006¶
Définir un chemin de recherche avec plusieurs schémas
Description¶
Set search path with multiple schemas is not supported in Snowflake, see the Snowflake USE SCHEMA documentation.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
Code généré :¶
Snowflake¶
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¶
Code généré :¶
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¶
Code généré :¶
Snowflake¶
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¶
Code généré :¶
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
Description¶
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.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
Code généré :¶
Snowflake¶
Meilleures pratiques¶
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¶
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¶
Résultats¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Code de sortie :
Snowflake¶
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¶
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.
Exemple de code¶
Code d’entrée :¶
PostgreSQL¶
Résultat¶
[22004] ERROR: NULL ne peut pas être attribué à la variable « v_notnull » déclarée NOT NULL.
Generated Code:
Snowflake
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¶
Code généré :¶
Snowflake¶
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¶
Code généré :¶
Snowflake¶
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:�¶
Code généré: ¶
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:�¶
Code généré: ¶
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:�¶
Code généré: ¶
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:�¶
Code généré: ¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.