SQL ServerPostgreSQL

Seu T-SQL vai quebrar de formas que você não espera.Mapeie o risco antes de migrar.

Migrate de SQL Server para PostgreSQL com confiança. Nossa análise detecta automaticamente incompatibilidades de sintaxe — dbo., IDENTITY, TRY/CATCH, @@ROWCOUNT, colunas calculadas e muito mais — antes que quebrem em produção.

T-SQL → PL/pgSQLProcedures convertidasDDL + DML + Triggers15+ regras de compatibilidadeJava · C# · Python · PHP

O SQL está escondido no seu código C# e Java

A maioria dos sistemas .NET com SQL Server usa Dapper, Entity Framework FromSqlRaw ou @Query no Spring. O SQLShifter extrai essas strings, roda a mesma análise do conversor e mostra: “PedidoService.cs, linha 42 — DATEADD e dbo. vão quebrar”..

Upload de repositório — análise gratuita

T-SQL vs PL/pgSQL — O que muda

As diferenças que causam 80% das falhas em migração.

Conceito
SQL Server (T-SQL)
PostgreSQL (PL/pgSQL)
Prefixo de schema
dbo.MinhaTabela
public.minha_tabela ou sem prefixo
Coluna calculada
Col AS (expr)
Col tipo GENERATED ALWAYS AS (expr) STORED
Concatenação de string
Nome + ' ' + Sobrenome
nome || ' ' || sobrenome
Tratamento de erros
BEGIN TRY / END CATCH
EXCEPTION WHEN OTHERS THEN
Linhas afetadas
@@ROWCOUNT
FOUND ou GET DIAGNOSTICS var = ROW_COUNT
Funções de erro
ERROR_MESSAGE(), ERROR_NUMBER()
SQLERRM, SQLSTATE
Auto-incremento
INT IDENTITY(1,1)
SERIAL ou GENERATED BY DEFAULT AS IDENTITY
DELETE com JOIN
DELETE t FROM t JOIN outra ON ...
DELETE FROM t USING outra WHERE ...
Transações
BEGIN TRAN / COMMIT TRAN
BEGIN / COMMIT (fora de blocos EXCEPTION)
Upsert
MERGE ... WHEN MATCHED THEN ...
INSERT ... ON CONFLICT DO UPDATE (PG 15+: MERGE)
Incompatibilidades Críticas

6 padrões T-SQL que quebram silenciosamente

O PostgreSQL não lança erro de compilação — o código roda e produz resultados errados ou falha em runtime.

🏷️Schema

Prefixo dbo. (Schema)

dbo.Tabela é exclusivo do SQL Server. O PostgreSQL usa public. por padrão — ou erro de schema not found.

FROM dbo.Funcionarios f
FROM funcionarios f -- ou public.
DDL Crítico

Colunas Calculadas AS (expr)

col AS (expr) cria coluna calculada no T-SQL. No PostgreSQL, a sintaxe é radicalmente diferente.

NomeCompleto AS (Nome + ' ' + Sob)
NomeCompleto VARCHAR GENERATED ALWAYS AS (nome || ' ' || sob) STORED
Tipo Crítico

Concatenação com + (strings)

Nome + ' ' + Sobrenome é T-SQL. No PostgreSQL, + tenta soma aritmética — TypeError em runtime.

Nome + ' ' + Sobrenome
nome || ' ' || sobrenome -- ou CONCAT(nome, ' ', sob)
Procedure Crítica

BEGIN TRY / END CATCH

Não existe em PL/pgSQL. O código migrado sem conversão não captura nenhum erro — falha silenciosa.

BEGIN TRY ... END TRY BEGIN CATCH -- tratamento END CATCH
BEGIN ... EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%', SQLERRM;
⚠️Procedure

@@ROWCOUNT / Linhas afetadas

@@ROWCOUNT não existe no PostgreSQL. O IF baseado nele nunca é executado — lógica de negócio silenciada.

IF @@ROWCOUNT = 0 THROW 60000, 'não achou', 1;
IF NOT FOUND THEN RAISE EXCEPTION 'não achou';
Procedure Crítica

ERROR_MESSAGE() e similares

ERROR_MESSAGE(), ERROR_NUMBER(), ERROR_SEVERITY() existem apenas no bloco CATCH do T-SQL.

DECLARE @err = ERROR_MESSAGE(); RAISERROR(@err, 16, 1);
RAISE EXCEPTION '%', SQLERRM; -- SQLSTATE para o código

Teste com um script real

Veja um exemplo clássico de procedure T-SQL que falha no PostgreSQL sem conversão.

usp_RegistrarPagamento.sql — T-SQL
12345678910111213141516171819202122
Nível de Risco
CRÍTICO
6 padrões incompatíveis
Statements
2 afetados
CREATE TABLE + PROCEDURE
Diagnóstico por Statement
  • CREATE TABLE: Prefixo dbo.

    Remover dbo. ou mapear para public.

  • CREATE TABLE: Colunas calculadas AS

    Reescrever com GENERATED ALWAYS AS ... STORED

  • CREATE TABLE: Concatenação com +

    Substituir + por || nas expressões

  • PROCEDURE: BEGIN TRY / END CATCH

    Converter para EXCEPTION WHEN OTHERS THEN

  • ⚠️

    PROCEDURE: @@ROWCOUNT

    Substituir por IF NOT FOUND THEN

  • PROCEDURE: ERROR_MESSAGE()

    Substituir por SQLERRM

PL/pgSQL — Código Convertido
CREATE TABLE funcionarios (
    funcionario_id SERIAL PRIMARY KEY,
    nome           VARCHAR(100) NOT NULL,
    nome_completo  VARCHAR GENERATED ALWAYS AS
                   (nome || ' ' || sobrenome) STORED,
    salario_liquido NUMERIC GENERATED ALWAYS AS
                   (salario_bruto - COALESCE(inss,0)) STORED
);
🔒

PL/pgSQL corrigido pronto.

Assine Pro para desbloquear e exportar o script.

Desbloquear Conversão Completa

Do T-SQL para o PL/pgSQL em 3 passos

Sem reescrita manual. Sem surpresas em produção.

📁
Passo 1

Suba seu projeto .sql

Upload de procedures, views, DDL, DML — qualquer T-SQL. Múltiplos arquivos aceitos. Nenhum dado armazenado.

🔍
Passo 2

Receba o mapa de risco

Relatório visual com % de compatibilidade, cada incompatibilidade mapeada e notas de especialista por trecho.

⬇️
Passo 3

Exporte o PL/pgSQL (Pro)

Baixe o script PostgreSQL pronto — dbo. removido, computed columns convertidas, procedures reestruturadas.

Pague só pelo que usar

Créditos por arquivo — pagamento único, sem mensalidade.

Gratuito

R$ 0

3 arquivos · até 1000 linhas por arquivo

  • 3 arquivos vitalícios
  • Até 1.000 linhas por arquivo
  • Relatório de risco completo
  • Detecção de 15+ incompatibilidades SS→PG
  • ZIP convertido (créditos pagos)
  • Exportação de projeto
Auditar grátis

5 arquivos

R$ 19,00

5 arquivos

até 2000 linhas por arquivo

Pagamento único — créditos não expiram

Comprar créditos

15 arquivos

R$ 49,00

15 arquivos

até 3000 linhas por arquivo

Pagamento único — créditos não expiram

Comprar créditos

40 arquivos

R$ 99,00

40 arquivos

até 5000 linhas por arquivo

Pagamento único — créditos não expiram

Comprar créditos

100 arquivos

R$ 199,00

100 arquivos

até 10000 linhas por arquivo

Pagamento único — créditos não expiram

Comprar créditos