SnowConvert AI – Diferenças funcionais do PostgreSQL¶
Nota
O SnowConvert AI para PostgreSQL atualmente oferece suporte à avaliação e tradução para TABLES e VIEWS. Embora o SnowConvert AI possa reconhecer outros tipos de instruções, elas não são totalmente compatíveis.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-PG0001¶
FOUND pode ter um comportamento diferente no Snowflake em alguns cenários.
Gravidade¶
Low
Descrição¶
A propriedade FOUND no PostgreSQL é baseada na última consulta executada e pode ser afetada por algumas instruções, como loops de INSERT, UPDATE, DELETE, MERGE, SELECT, INTO, PERFORM, FETCH e FOR. Para obter mais detalhes sobre essa propriedade, consulte a documentação do PostgreSQL.
No Snowflake, não existe uma tradução direta para essa propriedade nos seguintes cenários:
INSERTUPDATEDELETEMERGE
O código convertido será a propriedade SQLFOUND do Snowflake ([consulte a documentação aqui] https://docs.snowflake.com/en/developer-guide/snowflake-scripting/dml-status), pois se comporta como a propriedadeFOUND do PostgreSQL.
Para os outros casos, como:
SELECT INTOPERFORMFETCH
O código convertido será um UDF (IS_FOUND_UDF) personalizado que se comporta como a propriedadeFOUND do PostgreSQL.
Isso ocorre porque SQLFOUND só altera o valor quando pelo menos uma linha é afetada pela última consulta executada; se a última consulta não alterar nenhuma linha, o valor não será alterado.
IS_FOUND_UDF só funciona para instruções que retornam linhas; se nenhuma linha for retornada, o valor será FALSE.
Exemplo de SQLFOUND¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
A última consulta afeta uma tabela; portanto, SQLFOUND é o mais próximo da funcionalidade do PostgreSQL.
Exemplo UDF IS_FOUND_¶
SELECT SampleColumn FROM SampleTable;
A última consulta retornará uma linha, mas não alterará nada; portanto, IS_FOUND_UDF() é o mais próximo da funcionalidade do PostgreSQL.
Código-fonte UDF IS_FOUND_¶
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()))
$$;
Exemplo de código¶
Instrução 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;
$$;
Instrução de atualização:¶
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;
$$;
Instrução de exclusão:¶
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;
$$;
Instrução de fusão:¶
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;
$$;
Instrução 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;
$$;
Instrução de execução:¶
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;
$$;
Instrução 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 convertido para varchar.
Descrição¶
Este aviso é adicionado porque o tipo bpchar («caractere com espaço em branco») pode ter alguma diferença de equivalência funcional em comparação com o tipo de dados varchar no Snowflake. No entanto, ambos os tipos de dados podem armazenar valores de até «n» caracteres e consomem armazenamento apenas pela quantidade de dados realmente armazenados. A principal diferença ocorre quando há espaços em branco no fim dos dados, em que o bpchar não os armazena, mas o Snowflake sim.
Por esse motivo, podemos usar a função RTRIM para que esses espaços em branco não sejam armazenados. Mas pode haver casos em que a funcionalidade não seja completamente equivalente.
Exemplo de código¶
Código de entrada:¶
Definição da coluna¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
Conversão explícita¶
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Código gerado:¶
Definição da coluna¶
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" }}';
Conversão explícita¶
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;
Práticas recomendadas¶
A função
rtrimpode resolver diferenças de armazenamento caso você não queira que os valores em branco sejam armazenados. Esse caso é tratado na conversão explícita. No entanto, pode haver outros cenários em que isso precise ser tratado manualmente. Para mais informações, consulte a documentação do Snowflake sobre RTRIM.
SSC-FDM-PG0003¶
Bytea convertido em binário
Descrição¶
Este aviso é adicionado porque, quando o tipo de dados bytea é convertido para binário, o limite de tamanho é bastante reduzido de 1GB para 8MB.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE tbl(
col BYTEA
);
Código gerado:¶
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" }}';
Práticas recomendadas¶
Para obter mais informações, consulte a documentação do Snowflake sobre tipo de dados binário.
SSC-FDM-PG0004¶
O formato de saída da data pode variar.
Descrição¶
O formato de saída da data pode variar dependendo do tipo de carimbo de data/hora e do timestamp_output_format que está sendo utilizado. Você pode consultar isso aqui.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Código gerado:¶
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" }}';
Amostras¶
Exemplo com CREATE TABLE.
Código de entrada:¶
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;
Resultados¶
platform_id |
dt_update |
clock_timestamp |
|---|---|---|
1 |
2023-02-05 22:47:34.275 -0600 |
2023-02-05 23:16:15.754 -0600 |
Código gerado:¶
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;
Resultados¶
PLATFORM_ID |
DT_UPDATE |
CURRENT_TIMESTAMP(3) |
|---|---|---|
1 |
2023-02-05 20:52:30.082000000 |
2023-02-05 21:20:31.593 |
Exemplo com SELECT com clock_timestamp().
Código de entrada¶
PostgreSQL¶
select clock_timestamp();
Resultados¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Código gerado¶
Snowflake¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
Resultados¶
CURRENT_TIMESTAMP(3) |
|---|
2023-02-05 21:29:24.258 |
SSC-FDM-PG0005¶
A tabela UNLOGGED não é compatível com o Snowflake; os dados gravados podem ter desempenho diferente.
Descrição¶
As tabelas UNLOGGED de PostgreSQL oferecem uma vantagem de velocidade significativa ao ignorar o registro de gravação antecipada (WAL). No entanto, os dados delas não são replicados para instâncias espelhadas. O Snowflake não oferece suporte a essa funcionalidade; portanto, a cláusula UNLOGGED será transformada em comentário.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
CREATE UNLOGGED TABLE TABLE1 (
COL1 integer
);
Código gerado:¶
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¶
Caminho de pesquisa definido com vários esquemas.
Descrição¶
A definição do caminho de pesquisa com vários esquemas não é compatível com o Snowflake. Você pode consultar aqui.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
SET SEARCH_PATH TO schema1, schema2, schema3;
Código gerado:¶
Snowflake¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
SSC-FDM-PG0007¶
NULL é convertido para “” e pode ter um comportamento diferente no Snowflake.
Gravidade¶
Low
Descrição¶
No PostgreSQL, a remoção de um comentário é tratada usando o termo NULL. No entanto, no Snowflake, um método semelhante para remover um comentário é atribuir o valor de uma cadeia de caracteres vazia '' para fornecer o mesmo resultado. Essa abordagem garante que o comentário seja efetivamente mapeado para uma cadeia de caracteres vazia com um comportamento semelhante.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
COMMENT ON TABLE mytable IS NULL;
Código gerado:¶
Snowflake¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
SSC-FDM-PG0008¶
Tabelas Select into unlogged não são compatíveis com o Snowflake.
Descrição¶
Select Into não é compatível com o Snowflake; essa funcionalidade foi emulada com CREATE TABLE AS. Além disso, o Snowflake sempre usa logs de transações para proteger as tabelas e garantir a integridade e a capacidade de recuperação dos dados. Consequentemente, tabelas com a opção UNLOGGED não são compatíveis com o Snowflake.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
select column1
into UNLOGGED NewTable
from oldTable;
Código gerado:¶
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¶
A propriedade sequence nextval do Snowflake não garante a geração de números sequenciais sem lacunas.
Descrição¶
O Snowflake não garante a geração de números sequenciais sem lacunas. Os números gerados aumentam consistentemente em valor (ou diminuem em valor se o tamanho da etapa for negativo), mas não são necessariamente contíguos.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
SELECT nextval('seq1');
Código gerado:¶
Snowflake¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
SSC-FDM-PG0010¶
Os resultados podem variar devido ao comportamento da função bitwise do Snowflake.
Descrição¶
Os operadores bitwise << and >> são convertidos para as funções correspondentes do Snowflake BITSHIFTLEFT e BITSHIFTRIGHT. No entanto, devido às diferenças na forma como essas funções lidam com expressões, os resultados podem diferir daqueles no PostgreSQL.
Exemplo de código¶
Código de entrada:¶
PostgreSql¶
SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
Resultado¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-2147483648 |
16 |
Código gerado:¶
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;
Resultado¶
resultShiftedLeft |
resultShiftedRight |
|---|---|
-170141183460469231731687303715884105728 |
0 |
SSC-FDM-PG0011¶
O uso da restrição de coluna COLLATE foi desativado para esta condição de correspondência de padrões.
Descrição¶
Esta mensagem é adicionada quando uma condição de correspondência de padrões usa argumentos com especificações COLLATE, pois eles não são compatíveis atualmente na função de expressão regular do Snowflake. Consequentemente, a cláusula COLLATE deve ser desativada para usar esta função, o que pode resultar em diferenças nos resultados.
Exemplo de código¶
Código de entrada:¶
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;
Resultados¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Código de saída:
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;
Resultados¶
CI |
CS |
|---|---|
FALSE |
FALSE |
Práticas recomendadas¶
Se você precisa de equivalência para esses cenários, pode adicionar manualmente os seguintes parâmetros à função para obter equivalência funcional:
Parâmetro
Descrição
cCorrespondência com distinção entre maiúsculas e minúsculas
iCorrespondência sem distinção entre maiúsculas e minúsculas
Para obter mais informações, consulte o seguinte link.
SSC-FDM-PG0012¶
A restrição NOT NULL foi removida. Atribuir NULL a esta variável não causará mais uma falha.
Descrição¶
No PostgreSql, especificar a restrição NOT NULL garante que atribuir um valor nulo a uma variável resulte em um erro de tempo de execução. Como essa cláusula não existe no Snowflake, ela é removida durante a transformação, e atribuir NULL a esta variável não causará mais falha na execução.
Exemplo de código¶
Código de entrada:¶
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;
$$;
Resultado¶
[22004] ERROR: NULL não pode ser atribuído à variável «v_notnull» declarada como 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
Observação
Esta atribuição não falhará no Snowflake.
Práticas recomendadas¶
Revise a lógica do procedimento para garantir que esta variável não receba um valor
NULL.
SSC-FDM-PG0013¶
Função sintaticamente compatível com o Snowflake, mas pode apresentar diferenças funcionais.
Descrição¶
Esta mensagem de diferença funcional indica que, embora o Snowflake suporte a sintaxe da função (diretamente ou por meio de um mapeamento equivalente), o comportamento dela pode ser diferente do original em algumas situações.
Exemplo de código¶
Código de entrada:¶
PostgreSql¶
SELECT
LISTAGG(skill) WITHIN GROUP (ORDER BY skill) OVER (PARTITION BY
employee_name) AS employee_skills
FROM
employees;
Código gerado:¶
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;
Práticas recomendadas¶
Avalie com cuidado o comportamento funcional em busca de resultados inesperados, pois podem ocorrer diferenças apenas em cenários específicos.
SSC-FDM-PG0014¶
Pseudotipo desconhecido transformado em tipo de texto.
Descrição¶
Esta mensagem de diferença funcional indica que o pseudotipo UNKNOWN utilizado no PostgreSQL não é compatível com o Snowflake e foi transformado em um tipo de texto.
Exemplo de código¶
Código de entrada:¶
PostgreSql¶
CREATE TABLE PSEUDOTYPES
(
COL1 UNKNOWN
)
Código gerado:¶
Snowflake¶
CREATE TABLE PSEUDOTYPES (
COL1 TEXT /*** SSC-FDM-PG0014 - UNKNOWN PSEUDOTYPE TRANSFORMED TO TEXT TYPE ***/
)
Práticas recomendadas¶
Avalie com cuidado os usos das colunas com tipos de dados desconhecidos, pois podem ocorrer diferenças em cenários específicos.
SSC-FDM-PG0015¶
O comando PSQL não é aplicável no Snowflake.
Descrição¶
No Snowflake, os comandos PSQL não são aplicáveis. Embora o comando PSQL original não seja mais necessário para a execução, o SnowConvert AI o mantém como comentário.
Código de exemplo¶
Código de entrada: ¶
\set ON_ERROR_STOP TRUE
Código gerado: ¶
----** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COMMAND OPTION **
--\set ON_ERROR_STOP TRUE
SSC-FDM-PG0016¶
Matriz fortemente tipada transformada em ARRAY sem verificação de tipo.
Descrição¶
O SnowConvert AI adicionará este aviso porque o PostgreSQL é compatível com matrizes de qualquer tipo de base integrado ou definido pelo usuário, tipo de enumeração, tipo composto, tipo de intervalo ou domínio, enquanto o Snowflake não tem essa compatibilidade. No Snowflake, cada valor em uma matriz semiestruturada é do tipo VARIANT.
Código de exemplo¶
Código de entrada: ¶
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
Código gerado: ¶
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¶
A função definida pelo usuário que retorna um vazio foi transformada em um procedimento do Snowflake.
Descrição¶
O SnowConvert AI vai gerar um aviso para qualquer função que retorne um vazio. Isso ocorre porque as funções que retornam um vazio normalmente indicam um procedimento em vez de uma operação que produz valor, o que às vezes pode exigir tratamento especial durante a conversão.
Código de exemplo¶
Código de entrada: ¶
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;
Código gerado: ¶
--** 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¶
A instrução Analyze foi transformada em comentário, o que não se aplica ao Snowflake.
Descrição¶
O SnowConvert AI sinaliza as instruções ANALYZE com um aviso e as transforma em comentário. Embora ANALYZE seja utilizado no PostgreSQL para coletar estatísticas da tabela, o Snowflake gerencia automaticamente esse processo, tornando a instrução redundante e geralmente desnecessária após a conversão.
Código de exemplo¶
Código de entrada: ¶
ANALYZE customers (first_name, last_name)
Código gerado: ¶
----** SSC-FDM-PG0018 - ANALYZE STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--ANALYZE customers (first_name, last_name)
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com