SnowConvert: Diferenças funcionais do PostgreSQL¶
SSC-FDM-PG0001¶
Gravidade¶
Low
Descrição¶
A propriedade FOUND no PostgreSQL indica se a consulta mais recente retornou algum resultado. Essa propriedade pode ser modificada por vários comandos SQL, incluindo INSERT
, UPDATE
, DELETE
, MERGE
, SELECT INTO
, PERFORM
, FETCH
e loops FOR
. Para obter mais informações, consulte a documentação do PostgreSQL.
No Snowflake, não há equivalente direto para essa propriedade em nenhum cenário.
INSERT
UPDATE
DELETE
MERGE
O código será convertido para a propriedade SQLFOUND
do Snowflake (aqui está a documentação), que funciona de forma semelhante à propriedade FOUND
do PostgreSQL).
SELECT INTO
- Recupera dados de uma consulta e os armazena em variáveisPERFORM
- Executa uma consulta e descarta os resultadosFETCH
- Recupera linhas de um cursor em variáveis
O código criará uma função personalizada definida pelo usuário (UDF) chamada IS_FOUND_UDF
que replica a funcionalidade da propriedade FOUND
de PostgreSQL.
A variável SQLFOUND
só atualiza seu valor quando uma consulta modifica pelo menos uma linha no banco de dados. Se a consulta mais recente não modificar nenhuma linha, o valor de SQLFOUND
permanecerá inalterado.
A função IS_FOUND_UDF
retorna TRUE
somente quando a instrução retorna uma ou mais linhas. Se a instrução não retornar nenhuma linha, a função retornará FALSE
.
Exemplo de SQLFOUND¶
INSERT INTO SampleTable (SampleColumn1)
VALUES ('SampleValue0.1');
Como essa consulta modifica uma tabela, SQLFOUND
oferece a funcionalidade que mais se aproxima do comportamento do PostgreSQL.
Exemplo UDF IS_FOUND_¶
SELECT SampleColumn FROM SampleTable;
A função IS_FOUND_UDF()
é a que mais se aproxima do comportamento do PostgreSQL, pois retorna uma linha sem fazer nenhuma alteração nos dados.
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:¶
-- 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;
-- 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;
$$;
Instrução de atualização¶
-- 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;
-- 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;
$$;
Excluir instrução¶
-- 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;
-- 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;
$$;
Instrução Merge¶
-- 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;
-- 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;
$$;
Instrução Select Into¶
-- 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;
-- 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;
$$;
Instrução Execute:¶
-- Found property used with PERFORM statement.
CREATE OR REPLACE FUNCTION FoundUsingPerformFunction()
RETURNS BOOLEAN
AS
$$
BEGIN
PERFORM 1;
RETURN FOUND;
END;
$$
LANGUAGE plpgsql;
-- 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;
$$;
Instrução Fetch:¶
-- 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;
-- 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;
$$;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0002¶
Descrição¶
Esse aviso aparece porque o tipo de dados bpchar (blank-padded char) pode se comportar de forma diferente do varchar no Snowflake. Embora ambos os tipos de dados possam armazenar até «n» caracteres e usar o espaço de armazenamento com base no comprimento real dos dados, eles tratam os espaços finais de forma diferente. No bpchar, os espaços finais não são armazenados, enquanto o varchar do Snowflake os preserva.
Para evitar o armazenamento de espaços em branco desnecessários, você pode usar a função RTRIM. No entanto, esteja ciente de que, em alguns casos, isso pode não fornecer exatamente a mesma funcionalidade do código original.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE table1 (
col1 BPCHAR,
col2 BPCHAR(20)
);
SELECT 'Y'::BPCHAR;
SELECT 'Y '::BPCHAR(20);
SELECT COL1::BPCHAR(20) FROM tbl;
Código gerado:¶
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" }}';
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
rtrim
remove os espaços finais, o que pode ajudar a resolver as diferenças de armazenamento. Embora a conversão explícita trate disso automaticamente, talvez seja necessário usarrtrim
manualmente em outras situações. Saiba mais sobrertrim
na documentação do Snowflake RTRIM.Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0003¶
Descrição¶
Esse aviso indica que a conversão de dados do formato bytea para binário reduz significativamente o limite máximo de tamanho, de 1 gigabyte (GB) para 8 megabytes (MB).
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 detalhes, consulte a documentação do Snowflake sobre o tipo de dados binários.
Se você precisar de ajuda, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0004¶
Descrição¶
O formato da saída de data depende de dois fatores: o tipo de Timestamp e a configuração timestamp_output_format. Para obter mais detalhes, consulte a documentação do Snowflake.
Exemplo de código¶
Código de entrada:¶
CREATE TABLE table1 (
dt_update timestamp without time zone DEFAULT clock_timestamp()
);
Código gerado:¶
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" }}';
Exemplos¶
Criando tabelas: Um exemplo básico
Este exemplo demonstra como criar uma tabela em seu banco de dados.
Código de entrada:¶
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;
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:¶
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;
PLATFORM_ID DT_UPDATE CURRENT_TIMESTAMP(3)
1 2023-02-05 20:52:30.082000000 2023-02-05 21:20:31.593
Usando SELECT com clock_timestamp() - Exemplo
Código de entrada¶
select clock_timestamp();
clock_timestamp |
-----------------------+
2023-02-05 23:24:13.740|
Código de saída¶
ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS.FF';
select
CURRENT_TIMESTAMP(3);
CURRENT_TIMESTAMP(3)
2023-02-05 21:29:24.258
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0006¶
Descrição¶
A definição de vários esquemas em um caminho de pesquisa não é compatível com o Snowflake. Para obter mais informações sobre o uso do esquema, consulte a documentação do Snowflake.
Exemplo de código¶
Código de entrada:¶
SET SEARCH_PATH TO schema1, schema2, schema3;
Código gerado:¶
--** SSC-FDM-PG0006 - SET SEARCH PATH WITH MULTIPLE SCHEMAS IS NOT SUPPORTED IN SNOWFLAKE **
USE SCHEMA schema1 /*, schema2, schema3*/;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0007¶
Gravidade¶
Low
Descrição¶
Para remover um comentário em PostgreSQL, você usa NULL
. No entanto, no Snowflake, você deve usar uma cadeia de caracteres vazia (''
). Ambos os métodos alcançam o mesmo resultado de remover o comentário.
Exemplo de código¶
Código de entrada:¶
COMMENT ON TABLE mytable IS NULL;
Código gerado:¶
COMMENT ON TABLE mytable IS '' /*** SSC-FDM-PG0007 - NULL IS CONVERTED TO '' AND MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0008¶
Descrição¶
A instrução SELECT INTO
não está disponível no Snowflake. Em vez disso, você pode usar CREATE TABLE AS
para obter funcionalidade semelhante. Além disso, o Snowflake mantém automaticamente os logs de transação de todas as tabelas para garantir a integridade dos dados e os recursos de recuperação. Como resultado, as tabelas com a opção UNLOGGED
não são compatíveis com o Snowflake.
Exemplo de código¶
Código de entrada:¶
select column1
into UNLOGGED NewTable
from oldTable;
Código de saída:¶
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;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0009¶
Descrição¶
Os números de sequência do Snowflake podem ter intervalos entre eles. Embora os números sempre aumentem (ou diminuam se estiver usando um tamanho de passo negativo), eles podem não ser consecutivos.
Exemplo de código¶
Código de entrada:¶
SELECT nextval('seq1');
Código de saída:¶
SELECT seq1.nextval /*** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. ***/;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0010¶
Descrição¶
Os operadores de deslocamento bit a bit PostgreSQL <<
e >>
são convertidos nas funções BITSHIFTLEFT
e BITSHIFTRIGHT
do Snowflake. Observe que essas funções podem produzir resultados diferentes no Snowflake em comparação com o PostgreSQL devido a diferenças no tratamento de expressões.
Exemplo de código¶
Código de entrada:¶
SELECT 1 << 127 AS resultShiftedLeft, 16 >> 32 AS resultShiftedRight;
resultShiftedLeft |
resultShiftedRight |
---|---|
-2147483648 |
16 |
Código de saída:¶
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;
resultShiftedLeft |
resultShiftedRight |
---|---|
-170141183460469231731687303715884105728 |
0 |
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0011¶
Descrição¶
Essa mensagem aparece quando a correspondência de padrões inclui especificações COLLATE em seus argumentos. Como a função de expressão regular do Snowflake não é compatível com as especificações de COLLATE, a cláusula COLLATE deve ser removida. Observe que a remoção dessa cláusula pode levar a resultados diferentes em comparação com o banco de dados de origem.
Exemplo de código¶
Código de entrada:¶
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;
CI |
CS |
---|---|
TRUE |
FALSE |
Código de saída:
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;
CI |
CS |
---|---|
FALSE |
FALSE |
Recomendações¶
Para obter equivalência funcional nesses cenários, você pode adicionar manualmente esses parâmetros à função:
| Parameter | Description |
| ——— | ————————- |
| c
| Case-sensitive matching |
| i
| Case-insensitive matching |
Para obter mais detalhes, consulte este link.
Para obter suporte, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
SSC-FDM-PG0012¶
Descrição¶
No Redshift, quando uma variável é marcada com NOT NULL, a tentativa de atribuir um valor nulo causará um erro de tempo de execução. No entanto, o Snowflake não oferece suporte a essa restrição. Durante o processo de migração, a cláusula NOT NULL é removida, o que significa que a atribuição de valores NULL a variáveis será permitida e não gerará erros durante a execução.
Exemplo de código¶
Código de entrada:¶
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;
$$;
[22004] ERROR: A NULL value cannot be assigned to the variable «v_notnull» because it was declared with a NOT NULL constraint.
Código de saída:¶
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;
$$;
Essa operação será executada com êxito no Snowflake.
Recommendations
Verifique se a lógica do procedimento impede que seja atribuído a essa variável um valor
NULL
.Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com