Ao escrever arquivos de migração SQL em um projeto que usa vários sistemas de banco de dados, o GitHub Copilot pode gerar sintaxe que não corresponde ao seu banco de dados de destino. Isso acontece porque o Copilot analisa o contexto do arquivo, as configurações do projeto e o código ao redor para adivinhar o dialeto SQL. A detecção nem sempre é precisa e pode produzir sintaxe PostgreSQL em uma migração MySQL ou instruções T-SQL em um arquivo destinado ao SQLite. Este artigo explica como o Copilot decide qual dialeto usar, o que causa a detecção incorreta e como forçar o dialeto correto para seus arquivos de migração.
Principais Conclusões: Controlando o Dialeto SQL no Copilot para Arquivos de Migração
- Extensão do arquivo e dicas de comentário: O Copilot lê .sql, .prisma e nomes de pastas de migração para inferir o dialeto. Adicionar um comentário de dialeto no topo do arquivo substitui a detecção.
- Configuração no nível do projeto em .github/copilot.yml: Você pode definir um dialeto SQL padrão para todos os arquivos de migração em um repositório usando a configuração
sql.dialect. - Engenharia de prompt inline: Escrever um comentário como
-- Dialect: PostgreSQLantes da primeira instrução força o Copilot a usar esse dialeto para o arquivo inteiro.
Como o Copilot Detecta o Dialeto SQL em Arquivos de Migração
O Copilot usa três sinais para determinar qual dialeto SQL gerar. O primeiro sinal é a extensão do arquivo e o nome da pasta. Um arquivo chamado migrate_up.sql dentro de uma pasta migrations/ é tratado como um arquivo SQL genérico. Se a pasta for nomeada postgres_migrations ou o projeto contiver um docker-compose.yml referenciando PostgreSQL, o Copilot tende a usar sintaxe PostgreSQL.
O segundo sinal é o conteúdo do próprio arquivo. Se você já escreveu algumas instruções com aspas invertidas no estilo MySQL, o Copilot continua esse padrão. Se a primeira instrução usa SERIAL para autoincremento, o Copilot assume PostgreSQL. Isso significa que as primeiras linhas que você escreve têm uma influência desproporcional no restante do arquivo.
O terceiro sinal é a configuração do projeto. O Copilot lê .editorconfig, .github/copilot.yml e .vscode/settings.json em busca de dicas sobre a tecnologia de banco de dados. Se nenhum desses arquivos especificar um dialeto, o Copilot recorre a um modo SQL genérico que frequentemente produz SQL ANSI com ocasionais idiomas PostgreSQL ou MySQL, dependendo dos dados de treinamento.
Por que a Detecção de Dialeto Falha em Projetos Multi-Banco de Dados
Quando seu repositório contém arquivos de migração para dois ou mais bancos de dados, o Copilot não consegue alternar de forma confiável entre dialetos. Por exemplo, uma estrutura de pastas como db/mysql/migrations/ e db/postgres/migrations/ pode fazer com que o Copilot reutilize a sintaxe do primeiro arquivo de migração que processou. O modelo não mantém estado de dialeto separado por pasta, a menos que você anote explicitamente cada arquivo.
Passos para Forçar o Dialeto SQL Correto no Copilot
Use um dos seguintes métodos para garantir que o Copilot gere a sintaxe correta para seus arquivos de migração. Aplique o método que corresponde ao seu fluxo de trabalho e estrutura de equipe.
Método 1: Adicionar um Comentário de Dialeto no Topo de Cada Arquivo de Migração
- Abra o arquivo de migração no VS Code ou em outro editor habilitado para Copilot
Crie um novo arquivo ou abra um arquivo de migração .sql existente. - Escreva um comentário de dica de dialeto na primeira linha
Digite-- Dialect: PostgreSQLpara PostgreSQL,-- Dialect: MySQLpara MySQL,-- Dialect: TSQLpara SQL Server ou-- Dialect: SQLitepara SQLite. Coloque este comentário antes de qualquer instrução SQL. - Pressione Enter e comece a escrever a migração
O Copilot lê o comentário e gera sintaxe correspondente ao dialeto especificado. O comentário afeta apenas o arquivo atual.
Método 2: Definir um Dialeto Padrão no Arquivo de Configuração do Projeto
- Crie ou edite o arquivo .github/copilot.yml na raiz do seu repositório
Se o arquivo não existir, crie-o. Adicione o seguinte conteúdo:sql:
dialect: postgresql
Substituapostgresqlpormysql,tsqlousqliteconforme necessário. - Commit e push do arquivo de configuração
O Copilot lê a configuração da raiz do repositório. Todos os membros da equipe que usam o Copilot verão o mesmo dialeto padrão. - Sobrescreva por arquivo, se necessário
Mesmo com um padrão global, você ainda pode usar o comentário no nível do arquivo para alternar dialetos para arquivos de migração individuais.
Método 3: Usar uma Convenção de Nomenclatura de Arquivo com Tags Explícitas de Dialeto
- Renomeie os arquivos de migração para incluir o dialeto no nome
Use padrões como20250101_pg_create_users.sqlpara PostgreSQL ou20250101_my_create_users.sqlpara MySQL. O Copilot reconhece abreviações comuns comopg,my,tsqlelite. - Coloque os arquivos de migração em pastas específicas de dialeto
Crie pastas chamadaspostgresql/,mysql/oumssql/dentro do seu diretório de migrações. O Copilot usa o nome da pasta como um forte sinal de dialeto. - Escreva a primeira instrução de migração manualmente
Digite uma instrução específica do dialeto comoCREATE TABLE users (id SERIAL PRIMARY KEY);para PostgreSQL. O Copilot continuará com a sintaxe correspondente.
Se o Copilot Ainda Gerar o Dialeto Errado
O Copilot Produz Sintaxe PostgreSQL em uma Migração MySQL
Isso acontece quando o Copilot encontrou um arquivo PostgreSQL anteriormente na sessão ou quando o projeto contém uma referência a postgres em um README ou arquivo de configuração. Para corrigir, adicione -- Dialect: MySQL no topo do arquivo. Se o problema persistir, feche e reabra o arquivo após adicionar o comentário para redefinir o estado da sessão do Copilot.
O Copilot Usa SQL ANSI em Vez de T-SQL para Migrações do SQL Server
O Copilot recorre ao SQL ANSI quando não encontra nenhum sinal de dialeto. Adicione -- Dialect: TSQL no topo do arquivo. Além disso, certifique-se de que a extensão do arquivo seja .sql e que o nome da pasta inclua mssql ou sqlserver. Evite usar nomes de pasta genéricos como db ou data.
O Copilot Gera Sintaxe Incorreta para Migrações SQLite
O SQLite tem uma pegada de dialeto menor nos dados de treinamento do Copilot. O modelo pode produzir AUTO_INCREMENT do MySQL ou SERIAL do PostgreSQL. Adicione -- Dialect: SQLite no topo do arquivo. Escreva a primeira instrução CREATE TABLE manualmente usando sintaxe específica do SQLite, como INTEGER PRIMARY KEY AUTOINCREMENT, para reforçar o dialeto.
Métodos de Detecção de Dialeto do Copilot Comparados
| Método | Escopo | Prioridade de Sobrescrita | Melhor Para |
|---|---|---|---|
| Comentário no nível do arquivo | Arquivo único | Mais alta | Repositórios multi-banco de dados com arquivos de migração mistos |
| Configuração do projeto .github/copilot.yml | Repositório inteiro | Média | Equipes que usam um único sistema de banco de dados |
| Convenções de pasta e nomenclatura | Por pasta ou padrão de nomenclatura | Baixa | Projetos grandes com diretórios de migração separados por banco de dados |
O comentário no nível do arquivo sempre sobrescreve a configuração do projeto e os sinais baseados em pasta. Use o método de comentário quando precisar de controle preciso sobre um arquivo de migração específico. Use a configuração do projeto quando todos os arquivos de migração no repositório tiverem o mesmo sistema de banco de dados. Use convenções de pasta e nomenclatura como fallback para equipes que não podem modificar o arquivo de configuração do projeto.
Conclusão
Agora você pode forçar o GitHub Copilot a gerar o dialeto SQL correto para arquivos de migração adicionando um comentário de dialeto no topo de cada arquivo ou definindo um padrão na configuração do projeto. O comentário no nível do arquivo -- Dialect: PostgreSQL oferece o controle mais confiável. Para equipes, editar o arquivo .github/copilot.yml com uma configuração sql.dialect garante comportamento consistente em todos os arquivos de migração. Se você trabalha com vários bancos de dados no mesmo repositório, combine o método de comentário com nomes de pasta específicos de dialeto para reduzir erros de detecção.