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¶
A última consulta afeta uma tabela; portanto, SQLFOUND é o mais próximo da funcionalidade do PostgreSQL.
Exemplo UDF IS_FOUND_¶
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_¶
Exemplo de código¶
Instrução Insert:¶
PostgreSQL¶
Snowflake¶
Instrução de atualização:¶
PostgreSQL¶
Snowflake¶
Instrução de exclusão:¶
PostgreSQL¶
Snowflake¶
Instrução de fusão:¶
PostgreSQL¶
Snowflake¶
Instrução Select Into¶
PostgreSQL¶
Snowflake¶
Instrução de execução:¶
PostgreSQL¶
Snowflake¶
Instrução Fetch:¶
PostgreSQL¶
Snowflake¶
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¶
Conversão explícita¶
Código gerado:¶
Definição da coluna¶
Conversão explícita¶
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:¶
Código gerado:¶
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¶
The date output format may vary depending on the Timestamp type and the timestamp_output_format being used, see the Snowflake CURRENT_TIMESTAMP documentation.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
Código gerado:¶
Snowflake¶
Amostras¶
Exemplo com CREATE TABLE.
Código de entrada:¶
PostgreSQL¶
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¶
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¶
Resultados¶
clock_timestamp |
|---|
2023-02-05 23:24:13.740 |
Código gerado¶
Snowflake¶
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¶
Código gerado:¶
Snowflake¶
SSC-FDM-PG0006¶
Caminho de pesquisa definido com vários esquemas.
Descrição¶
Set search path with multiple schemas is not supported in Snowflake, see the Snowflake USE SCHEMA documentation.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
Código gerado:¶
Snowflake¶
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¶
Código gerado:¶
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¶
Código gerado:¶
Snowflake¶
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¶
Código gerado:¶
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
Descrição¶
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.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
Código gerado:¶
Snowflake¶
Práticas recomendadas¶
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¶
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¶
Resultados¶
CI |
CS |
|---|---|
TRUE |
FALSE |
Código de saída:
Snowflake¶
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¶
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.
Exemplo de código¶
Código de entrada:¶
PostgreSQL¶
Resultado¶
[22004] ERROR: NULL não pode ser atribuído à variável «v_notnull» declarada como NOT NULL
Generated Code:
Snowflake
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¶
Código gerado:¶
Snowflake¶
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¶
Código gerado:¶
Snowflake¶
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: ¶
Código gerado: ¶
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: ¶
Código gerado: ¶
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: ¶
Código gerado: ¶
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: ¶
Código gerado: ¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com