SnowConvert AI – Problemas com o PostgreSQL

Nota

Escopo de conversão

O SnowConvert AI para PostgreSQL concentra as capacidades de avaliação e tradução principalmente em TABLES e VIEWS. Embora o SnowConvert AI consiga reconhecer outros tipos de instruções padrão ANSI, estas ainda não são totalmente compatíveis para conversão. Isso significa que, embora a ferramenta possa identificá-las, ela não realizará uma tradução completa para essas unidades de código não compatíveis.

SSC-EWI-PG0001

A função age não é compatível com o Snowflake.

Gravidade

Medium

Descrição

Este erro foi adicionado porque o SnowConvert AI não é compatível com a funcionalidade age().

Exemplo de código

Código de entrada:
PostgreSQL
 SELECT
   age(date1::date, date2::date)
FROM
   Table1;
Copy
Código gerado:
Snowflake
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "age", "Table1" **
SELECT
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0001 - AGE IS NOT SUPPORTED ON SNOWFLAKE. ***/!!!
   AGE(date1::date, date2::date)
FROM
   Table1;
Copy

Práticas recomendadas

  • A função de tempo Datediff pode resolver alguns casos em que o objetivo da consulta é obter um intervalo específico de valores, mas isso precisa ser tratado manualmente para cada cenário. Para obter mais informações, consulte a documentação do Snowflake sobre Datediff.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-PG0002

Parâmetro de índice de restrição incompatível

Gravidade

Low

Descrição

O uso dos seguintes parâmetros de índice em restrições não é compatível com o Snowflake.

  • INCLUDE

  • WITH

  • USING INDEX TABLESPACE

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE TABLE Table1 (
    code        char(5),
    date_prod   date,
    CONSTRAINT production UNIQUE(date_prod) INCLUDE(code)
);

CREATE TABLE Table2 (
    name    varchar(40),
    UNIQUE(name) WITH (fillfactor=70)
);

CREATE TABLE Table3 (
    name    varchar(40),
    PRIMARY KEY(name) USING INDEX TABLESPACE tablespace_name
);
Copy
Código gerado:
Snowflake
 CREATE TABLE Table1 (
    code        char(5),
    date_prod   date,
    CONSTRAINT production UNIQUE(date_prod)
                                            !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - INCLUDE PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! INCLUDE(code)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';

CREATE TABLE Table2 (
    name    varchar(40),
    UNIQUE(name)
                 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - WITH PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! WITH (fillfactor=70)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';

CREATE TABLE Table3 (
    name    varchar(40),
    PRIMARY KEY(name)
                      !!!RESOLVE EWI!!! /*** SSC-EWI-PG0002 - USING PARAMETER NOT APPLICABLE. CONSTRAINT INDEX PARAMETERS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!! USING INDEX TABLESPACE tablespace_name
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Práticas recomendadas

SSC-EWI-PG0003

Herança não compatível

Gravidade

Low

Descrição

A herança entre tabelas é permitida no PostgreSQL, mas não no Snowflake. Para obter mais informações sobre herança no PostgreSQL, clique aqui.

Exemplo de código

Código de entrada:
PostgreSQL
 ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy
Código gerado:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0003 - TABLE INHERITANCE IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
ALTER TABLE Table1
ADD CONSTRAINT const3 UNIQUE (zip);
Copy

Práticas recomendadas

SSC-EWI-PG0004

Restrição de exclusão não compatível

Gravidade

Medium

Descrição

A restrição de exclusão utilizada no PostgreSQL não é compatível com o Snowflake.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE TABLE Table1 (
    id      int,
    EXCLUDE USING gist (id WITH &&)
);
Copy
Código gerado:
Snowflake
 CREATE TABLE Table1 (
    id      int,
    !!!RESOLVE EWI!!! /*** SSC-EWI-PG0004 - EXCLUDE CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
    EXCLUDE USING gist (id WITH &&)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "09/17/2024" }}';
Copy

Práticas recomendadas

SSC-EWI-PG0006

A referência a uma variável usando o rótulo não é compatível com o Snowflake.

Gravidade

Medium

Descrição

Este erro é adicionado quando o corpo de um loop FOR referencia uma variável usando o rótulo. O Snowflake não é compatível com a referência a uma variável usando o nome qualificado.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE OR REPLACE PROCEDURE procedure1(out result VARCHAR(100))
LANGUAGE plpgsql
AS $$
BEGIN
result := '<';
<<outer_loop>>
for i in 1..3 loop
  <<inner_loop>>
  for i in 4..6 loop
  result := result || '(' || outer_loop.i || ', ' || i || ')';
  end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
Copy
Código gerado:
Snowflake
 CREATE OR REPLACE PROCEDURE procedure1 (result OUT VARCHAR(100))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
result := '<';
for i in 1 TO 3
                --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                loop
  for i in 4 TO 6
                  --** SSC-PRF-0008 - PERFORMANCE REVIEW - LOOP USAGE **
                  loop
  result := result || '(' ||
                             !!!RESOLVE EWI!!! /*** SSC-EWI-PG0006 - REFERENCE TO A VARIABLE USING THE LABEL IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! outer_loop.i || ', ' || i || ')';
  end loop inner_loop;
end loop outer_loop;
result := result || '>';
END;
$$;
Copy

Práticas recomendadas

SSC-EWI-PG0007

A cláusula INTO em SQL dinâmico não é compatível com o Snowflake.

Gravidade

Low

Descrição

O SQL dinâmico do PostgreSQL permite que a cláusula INTO armazene resultados de consulta em variáveis. O Snowflake não é compatível com essa funcionalidade. Portanto, a cláusula INTO será sinalizada com um EWI.

Exemplo de código

Código de entrada:
PosgreSQL
 CREATE OR REPLACE PROCEDURE get_max_id(table_name VARCHAR, OUT max_id INTEGER)
AS $$
DECLARE
    sql_statement VARCHAR;
BEGIN
    sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
    EXECUTE sql_statement INTO max_id;
END;
$$ LANGUAGE plpgsql;
Copy
Código gerado:
Snowflake
 CREATE OR REPLACE PROCEDURE get_max_id (table_name VARCHAR, max_id OUT INTEGER)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "postgresql",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
DECLARE
    sql_statement VARCHAR;
BEGIN
    sql_statement := 'SELECT MAX(id) FROM ' || table_name || ';';
    EXECUTE IMMEDIATE sql_statement
                                    !!!RESOLVE EWI!!! /*** SSC-EWI-PG0007 - INTO CLAUSE IN DYNAMIC SQL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! INTO max_id;
END;
$$;
Copy

Práticas recomendadas

SSC-EWI-PG0008

O uso de interval dentro de uma função to_char não é compatível com o Snowflake.

Gravidade

High

Descrição

O uso de interval dentro de to_char para converter tipos de dados de data/hora em texto não é compatível com o Snowflake.

Exemplo de código

Código de entrada:
PostgreSQL
 SELECT to_char(interval '15h 2m 12s', 'HH24:MI:SS');
Copy
Código gerado:
Snowflake
 SELECT to_char(INTERVAL '15h, 2m, 12s', 'HH24:MI:SS') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0008 - THE USE OF INTERVAL WITHIN TO_CHAR IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!;
Copy

Para mais informações, consulte:

Práticas recomendadas

SSC-EWI-PG0009

Comentários em «Type» não são compatíveis com o Snowflake.

Gravidade

Low

Descrição

No código original, existem vários objetos que podem receber comentários. No entanto, no Snowflake, vários desses objetos não existem e, portanto, não é possível atribuir comentários a eles. O código para lidar com esses cenários é transformado em comentário para evitar possíveis erros.

Exemplo de código

Código de entrada:
PostgreSql
 COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
Copy
Código gerado:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0009 - COMMENT ON 'RULE' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!!
COMMENT ON RULE rule_name on TABLE_NAME IS 'this is a comment';
Copy

Práticas recomendadas

SSC-EWI-PG0010

A criação de sequências temporárias não é compatível com o Snowflake.

Gravidade

Low

Descrição

Quando uma sequência temporária é criada no PostgreSQL, ela é criada apenas para a sessão ativa e é excluída automaticamente ao sair da sessão. No entanto, essa funcionalidade não está disponível no Snowflake; portanto, ela é gerada como uma sequência normal. Durante a execução, uma sequência com um nome semelhante pode já existir, o que causará um erro para um objeto existente.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE TEMPORARY SEQUENCE sequence1;
CREATE TEMP SEQUENCE sequence2;
Copy
Código gerado:
Snowflake
 --** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE TEMPORARY !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence1;


--** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
 CREATE TEMP !!!RESOLVE EWI!!! /*** SSC-EWI-PG0010 - CREATE TEMPORARY SEQUENCE IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence2;
Copy

Práticas recomendadas

  • Se você tiver um problema de criação, tente renomear a sequência para evitar conflitos.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com.

SSC-EWI-PG0011

A opção de sequência «option_name» não é compatível com o Snowflake.

Gravidade

Low

Descrição

Algumas opções disponíveis no PostgreSQL para a instrução de sequência não são compatíveis com o Snowflake.

As opções não compatíveis são:

  • Unlogged.

  • AS <data_type>.

  • MinValue.

  • MaxValue.

  • No MinValue.

  • No MaxValue.

  • Cache.

  • Cycle.

  • Owner By.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE UNLOGGED SEQUENCE sequence_name;
Copy
Código gerado:
Snowflake
 --** SSC-FDM-PG0009 - THE SEQUENCE NEXTVAL PROPERTY SNOWFLAKE DOES NOT GUARANTEE GENERATING SEQUENCE NUMBERS WITHOUT GAPS. **
CREATE UNLOGGED !!!RESOLVE EWI!!! /*** SSC-EWI-PG0011 - 'UNLOGGED' IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! SEQUENCE sequence_name;
Copy

Práticas recomendadas

SSC-EWI-PG0012

A opção de restrição NOT VALID não é compatível com o Snowflake.

Descrição

A opção de restrição NOT VALID é utilizada no contexto de adicionar ou alterar uma restrição para indicar que a restrição deve ser adicionada ou modificada sem verificar se os dados existentes estão em conformidade com ela. Esta cláusula não é compatível com o Snowflake.

Exemplo de código

Código de entrada:
PostgreSQL
 ALTER TABLE Table1 *
ADD CONSTRAINT const UNIQUE (zip) NOT VALID;
Copy
Código gerado:
Snowflake
 ALTER TABLE Table1
ADD CONSTRAINT const UNIQUE (zip)
                                  !!!RESOLVE EWI!!! /*** SSC-EWI-PG0012 - NOT VALID CONSTRAINT OPTION IS NOT SUPPORTED BY SNOWFLAKE. ***/!!! NOT VALID;
Copy

Práticas recomendadas

SSC-EWI-PG0014

Os cursores de script do Snowflake não são compatíveis com orientação de busca.

Gravidade

Medium

Descrição

No Snowflake, a instrução FETCH do cursor sempre busca a próxima linha no cursor. Ao transformar o código, o SnowConvert AI transformará as orientações do cursor que são equivalentes a um FETCH NEXT, pois são funcionalmente equivalentes no Snowflake, a saber:

  • FETCH NEXT

  • FETCH FORWARD

  • FETCH RELATIVE 1

  • FETCH (nenhuma orientação especificada)

Nenhuma outra orientação é compatível, e a instrução FETCH será marcada com este EWI para refletir isso.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE OR REPLACE PROCEDURE cursor_test()
AS $$
BEGIN
   FETCH FORWARD FROM cursor1 INTO my_var;
   FETCH FIRST FROM cursor1 INTO my_var;
   FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
Copy
Código gerado:
Snowflake
 CREATE OR REPLACE PROCEDURE cursor_test ()
RETURNS VARCHAR
AS $$
BEGIN
   FETCH
   	cursor1 INTO my_var;
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
   FETCH FIRST FROM cursor1 INTO my_var;
   !!!RESOLVE EWI!!! /*** SSC-EWI-PG0014 - SNOWFLAKE SCRIPTING CURSORS DO NOT SUPPORT FETCH ORIENTATION. ***/!!!
   FETCH LAST FROM cursor1 INTO my_var;
END;
$$;
Copy

Práticas recomendadas

SSC-EWI-PG0015

Fetch do cursor sem variáveis de destino não é compatível com o Snowflake.

Gravidade

Medium

Descrição

No PostgreSQL, é possível usar uma instrução FETCH sem INTO para imprimir no console os valores das linhas buscadas. No entanto, o Snowflake exige a instrução FETCH para especificar a cláusula INTO com as variáveis onde os valores das linhas buscadas serão armazenados.

Sempre que um FETCH sem INTO for encontrado no código, o SnowConvert AI vai gerar este EWI para notificar o usuário de que esse tipo de FETCH não é compatível.

Exemplo de código

Código de entrada:
PostgreSQL
 FETCH PRIOR FROM cursor1;
Copy
Código gerado:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-PG0015 - FETCH CURSOR WITHOUT TARGET VARIABLES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FETCH PRIOR FROM cursor1;
Copy

Práticas recomendadas

SSC-EWI-PG0016

Tipo de cadeia de caracteres bit convertido para tipo varchar

Gravidade

Low

Descrição

Ao migrar do PostgreSQL, esteja ciente de que os tipos de cadeia de caracteres BIT e as funções relacionadas não são compatíveis nativamente com o Snowflake. Esses tipos de dados serão convertidos para o VARCHAR do Snowflake. Essa conversão significa que qualquer consulta PostgreSQL ou lógica de aplicativo que dependam de operações bit a bit nessas colunas exigirão modificações significativas para conseguir a mesma funcionalidade no Snowflake.

Exemplo de código

Código de entrada:
PostgreSQL
 CREATE TABLE table1 (
   col1 bit(10)
);
Copy
Código gerado:
Snowflake
 CREATE TABLE table1 (
   col1 CHARACTER(10) !!!RESOLVE EWI!!! /*** SSC-EWI-PG0016 - BIT DATA TYPE CONVERTED TO CHARACTER ***/!!!
);
Copy

Práticas recomendadas