Recentemente tive que lidar com algumas limitações do meu provedor de banco de dados que não suporta renomeação de tabelas. Então tive que duplicar uma tabela manualmente.
O banco de dados da minha plataforma SaaS está hospedado na Planetscale. A empresa fornece um banco de dados sem servidor compatível com MySQL. Graças à sua natureza sem servidor, você pode obter o poder da fragmentação horizontal, alterações de esquema sem bloqueio e muitos outros recursos de banco de dados poderosos sem o incômodo de implementá-los. E uma ótima experiência para desenvolvedores.
De outra perspectiva, você tem que lidar com algumas restrições em relação às mudanças de esquema. Essas limitações são necessárias para garantir consistência em um ambiente fragmentado.
Eles fizeram muito progresso desde que me tornei cliente (quase dois anos atrás), como o suporte para restrição de chave estrangeira: https://planetscale.com/docs/concepts/foreign-key-constraints
Inspector é um aplicativo Laravel. Usando as migrações do Laravel eu poderia usar a função rename para simplesmente alterar o nome de uma tabela:
Schema::rename('from', 'to');
Planetscale não oferece suporte nativo à renomeação de tabelas. Então tive que encontrar uma solução alternativa para realizar a tarefa.
Para ser honesto, renomear uma tabela é uma operação bastante rara. Para mim foi por causa de uma sobreposição de nomes entre as entidades “Projetos” e “Aplicativos”. Tive que renomear Projetos -> Aplicativos.
Existem duas maneiras de duplicar uma tabela no MySQL.
Você pode duplicar apenas a estrutura da tabela (colunas, chaves, índices, etc) sem dados, usando CREATE TABLE… LIKE:
CREATE TABLE applications LIKE projects;
O resultado é a criação da tabela de aplicações com exatamente a mesma estrutura da tabela de projetos original, mas SEM dados.
Para importar dados também, você pode executar uma segunda instrução como INSERT INTO… SELECT:
INSERT INTO applications SELECT * FROM projects;
Tenha cuidado ao executar esta instrução em tabelas grandes porque pode consumir muito tempo e recursos do servidor.
A segunda opção é duplicar apenas definições de coluna e importar dados em uma instrução usando CREATE TABLE… AS SELECT:
CREATE TABLE applications AS SELECT * FROM projects;
A nova tabela de aplicativos herda apenas as definições básicas de colunas da tabela de projetos. Ele não duplica restrições de chave estrangeira, índices e definições de incremento automático.
Esta opção pode ser útil quando você tem os nomes dos índices e chaves relacionados ao nome da tabela. Alterando o nome da tabela você deve substituir os nomes das restrições. É melhor você não importá-los e fazer tudo de novo.
Banco de dados é sempre um tema importante para desenvolvedores em qualquer estágio. Você pode encontrar outros recursos técnicos no blog. Aqui estão os artigos mais populares sobre o assunto:
Inspector é uma ferramenta de monitoramento de execução de código projetada especificamente para desenvolvedores de software. Você não precisa instalar nada no nível do servidor, basta instalar o pacote do compositor e você está pronto para começar.
Ao contrário de outras plataformas complexas e completas, o Inspector é super fácil e compatível com PHP. Você pode experimentar nosso pacote Laravel ou Symfony.
Se você procura automação eficaz, insights profundos e a capacidade de encaminhar alertas e notificações para seu ambiente de mensagens, experimente o Inspector gratuitamente. Registre sua conta.
Ou saiba mais no site: https://inspector.dev
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3