Gerador de Migração Prisma Schema para SQL DDL

Gerador de Migração Prisma Schema para SQL DDL

Guia técnico para converter esquemas Prisma em migrações SQL DDL para PostgreSQL, MySQL e SQLite.

Predefinições:
Dialeto Alvo:
Definição do Esquema Prisma(4 modelos, 2 enums)
-- ============================================================================
-- ToolsAA Prisma to SQL DDL Generator
-- Target Dialect: POSTGRESQL
-- Generated via ToolsAA Prisma-to-SQL Engine
-- 100% Pure Client-Side Browser Compilation
-- ============================================================================

-- ----------------------------------------------------------------------------
-- Drop Existing Tables
-- ----------------------------------------------------------------------------
DROP TABLE IF EXISTS "user_sessions" CASCADE;
DROP TABLE IF EXISTS "memberships" CASCADE;
DROP TABLE IF EXISTS "users" CASCADE;
DROP TABLE IF EXISTS "organizations" CASCADE;

-- ----------------------------------------------------------------------------
-- Custom Enum Types
-- ----------------------------------------------------------------------------
DROP TYPE IF EXISTS "Role";
CREATE TYPE "Role" AS ENUM ('SUPERADMIN', 'ADMIN', 'MEMBER', 'VIEWER');
DROP TYPE IF EXISTS "MemberStatus";
CREATE TYPE "MemberStatus" AS ENUM ('INVITED', 'ACTIVE', 'SUSPENDED');

-- ----------------------------------------------------------------------------
-- Table Definitions
-- ----------------------------------------------------------------------------
CREATE TABLE "organizations" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "name" VARCHAR(128) NOT NULL,
  "slug" VARCHAR(64) NOT NULL UNIQUE,
  "domain" VARCHAR(128),
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "users" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "email" VARCHAR(255) NOT NULL UNIQUE,
  "fullName" VARCHAR(128) NOT NULL,
  "avatarUrl" VARCHAR(512),
  "emailVerified" TIMESTAMPTZ,
  "isActive" BOOLEAN NOT NULL DEFAULT true,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  "updatedAt" TIMESTAMPTZ NOT NULL,
  PRIMARY KEY ("id")
);

CREATE TABLE "memberships" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "organizationId" UUID NOT NULL,
  "userId" UUID NOT NULL,
  "role" "Role" NOT NULL DEFAULT 'MEMBER',
  "status" "MemberStatus" NOT NULL DEFAULT 'ACTIVE',
  "joinedAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id"),
  UNIQUE ("organizationId", "userId")
);

CREATE TABLE "user_sessions" (
  "id" UUID NOT NULL DEFAULT 'uuid(',
  "sessionToken" VARCHAR(255) NOT NULL UNIQUE,
  "userId" UUID NOT NULL,
  "ipAddress" VARCHAR(45),
  "userAgent" VARCHAR(512),
  "expiresAt" TIMESTAMPTZ NOT NULL,
  "createdAt" TIMESTAMPTZ NOT NULL DEFAULT 'now(',
  PRIMARY KEY ("id")
);

-- ----------------------------------------------------------------------------
-- Foreign Key Constraints
-- ----------------------------------------------------------------------------
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_organizationId FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE;
ALTER TABLE "memberships" ADD CONSTRAINT fk_memberships_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;
ALTER TABLE "user_sessions" ADD CONSTRAINT fk_user_sessions_userId FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE;

-- ----------------------------------------------------------------------------
-- Secondary Indexes
-- ----------------------------------------------------------------------------
CREATE INDEX "idx_memberships_userId" ON "memberships" ("userId");
CREATE INDEX "idx_user_sessions_userId_expiresAt" ON "user_sessions" ("userId", "expiresAt");
4
Modelos Analisados
27
Colunas e Atributos
100%
SQL Pronto para Execução

Compilação Instantânea de Esquemas

Analisa modelos Prisma, chaves compostas e tipos nativos na memória do navegador sem sobrecarga de servidor.

Privacidade 100% Local

Os seus esquemas de banco de dados e arquiteturas proprietárias nunca saem do seu navegador.

Suporte Multi-Dialeto SQL

Geração de DDL ajustada para PostgreSQL, MySQL, SQLite e SQL Server com tipos específicos.

Referência técnica e guia de arquitetura

Gerador de Migração Prisma Schema para SQL DDL — Guia de referência

Guia técnico para converter esquemas Prisma em migrações SQL DDL para PostgreSQL, MySQL e SQLite.

Parâmetros principais e controles

dialectSqlDialect (postgresql | mysql | sqlite | sqlserver)

Dialeto SQL de destino que define mapeamento de tipos de dados, delimitadores de identificadores e geração de enums.

Padrão: postgresql
dropTableIfExistsboolean

Adiciona instruções DROP TABLE IF EXISTS (e DROP TYPE no PostgreSQL) para garantir migrações idempotentes e seguras para reexecução.

Padrão: true
includeForeignKeysboolean

Gera restrições FOREIGN KEY baseadas em campos @relation do Prisma, mapeando ações onDelete e onUpdate correspondentes.

Padrão: true
separateAlterFkboolean

Emite chaves estrangeiras como instruções ALTER TABLE ao final do script em vez de inline, prevenindo bloqueios por dependência circular.

Padrão: true
includeIndexesboolean

Cria instruções CREATE INDEX e CREATE UNIQUE INDEX explícitas para atributos @@index e @@unique compostos do Prisma.

Padrão: true
quoteIdentifiersboolean

Envolve identificadores de tabelas, colunas e restrições com delimitadores específicos do banco de dados para evitar conflito com palavras reservadas.

Padrão: true

Dicas profissionais e melhores práticas

Separar chaves com ALTER TABLE

Habilite separateAlterFk para esquemas com dependências mútuas ou cíclicas. Aplicar restrições após a execução de todos os CREATE TABLE evita falhas na ordem de dependência durante migrações.

Tratamento de CUID e NanoID em SQL

Funções como @default(cuid()) ou @default(nanoid()) operam no ambiente JavaScript e não têm padrão SQL nativo. Mapeie essas colunas como VARCHAR(30) ou mude para @default(uuid()) para geração nativa no banco.

Tipos nativos com atributos @db

Campos String e DateTime genéricos mapeiam para TEXT ou TIMESTAMP. Utilize anotações como @db.VarChar(255), @db.Timestamptz ou @db.Decimal(12, 2) para gerar DDL preciso e com consumo otimizado de armazenamento.

Trigger updatedAt no PostgreSQL

Enquanto o MySQL suporta @updatedAt via ON UPDATE CURRENT_TIMESTAMP, o PostgreSQL requer gatilhos procedurais. Integre o DDL gerado com uma função trigger PL/pgSQL BEFORE UPDATE para atualizar registros.

Problemas comuns e solução de problemas

Falha na criação de chave estrangeira com erro relation does not exist

Ocorre quando uma chave estrangeira inline referencia uma tabela declarada adiante no script. Defina separateAlterFk como true para desacoplar a criação de tabelas da inclusão de constraints.

Migração no PostgreSQL falha com erro type already exists ao reexecutar

Habilite dropTableIfExists para incluir comandos DROP TYPE IF EXISTS antes dos tipos, ou envolva a criação de enums em blocos DO $$ BEGIN ... EXCEPTION WHEN duplicate_object THEN null; END $$.

SQLite rejeita sintaxe ALTER TABLE ADD CONSTRAINT FOREIGN KEY

O SQLite não aceita adição posterior de chaves estrangeiras por ALTER TABLE. Para o SQLite, configure constraints inline no CREATE TABLE ou recrie tabelas utilizando estruturas temporárias de staging.

Perguntas frequentes (FAQ)

O DDL SQL gerado pode ser executado em pipelines de CI/CD sem a CLI do Prisma?▼

Sim. As instruções geradas são DDL puras e autossuficientes, plenamente compatíveis com Flyway, Liquibase, golang-migrate ou execuções diretas via psql e mysql.

Quais estruturas SQL representam os relacionamentos muitos-para-muitos implícitos do Prisma?▼

Quando dois modelos definem listas de relação m:n sem uma tabela intermediária explícita, o utilitário gera a tabela de junção padrão _ModelAToModelB com chaves compostas e exclusão em cascata.

Definições de esquema ou credenciais de banco são transmitidas para servidores externos?▼

Não. Toda a análise da AST, resolução do grafo relacional e compilação SQL acontecem de forma 100% local na memória do navegador via JavaScript. Nenhum dado transita pela rede.

Quais cláusulas SQL representam chaves primárias e restrições únicas compostas?▼

Atributos @@id em múltiplos campos são traduzidos em cláusulas PRIMARY KEY (col1, col2) no nível da tabela, e atributos @@unique são compilados em instruções CREATE UNIQUE INDEX conforme o dialeto configurado.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Guia do Desenvolvedor: Gerador de Interfaces e Tipos TypeScript a partir do Prisma SchemaDesenvolvimento

Extraia modelos, enums, campos opcionais e relações do esquema Prisma em interfaces TypeScript puras sem necessidade do runtime do Prisma Client.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Clientes API Axios TypeScript a partir de OpenAPI e SwaggerDesenvolvimento

Gere funções de cliente HTTP Axios limpas e com segurança de tipos rigorosa a partir de especificações OpenAPI 3.0 e Swagger JSON/YAML.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Cliente TypeScript com Fetch Nativo a partir de OpenAPI e SwaggerDesenvolvimento

Gere clientes de API em TypeScript com fetch nativo sem dependências externas, serialização de query string, cabeçalhos e tipagem completa.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de DDL SQL CREATE TABLE a partir de Esquemas Drizzle ORMDesenvolvimento

Converta definições pgTable, mysqlTable e sqliteTable do Drizzle ORM em scripts executáveis de migração SQL CREATE TABLE com máxima precisão.

Abrir ferramenta→
Guia do desenvolvedor para gerador de YAML do GitHub Actions CI/CDDesenvolvimento

Crie pipelines YAML de fluxo de trabalho do GitHub Actions prontos para produção para Node.js, Go, Python, builds Docker, testes automatizados e releases contínuas.

Abrir ferramenta→
Gerador de Configuração do Linux Logrotate (Retenção e Compactação)Desenvolvimento

Gere arquivos de configuração para /etc/logrotate.d/ prontos para produção com rotação diária/semanal, compactação gzip, dateext, limites de tamanho e scripts postrotate.

Abrir ferramenta→