Usando SQLite3 pelo terminal podemos acabar inicializando-o sem especificar o banco que queremos, escrevendo apenas
user@host:~$ sqlite3
O que implica que o trabalho que executarmos a partir daqui não será salvo automaticamente. Também pode ocorrer de inicializarmos um banco já existente, criarmos tabelas/inserirmos dados e, só depois, percebermos que não era naquele banco que queríamos inserir os dados.
Considerando o primeiro caso apresentado, a solução é simples e direta, podemos usar o comando .backup
. Para isso, basta escrever:
sqlite> .backup meuBanco.db
Sendo que meuBanco.db
foi o nome que escolhi como novo banco de dados (caso já exista um arquivo com o nome escolhido, seus dados serão sobrescrito).
Em seguida basta sair da solução atual e entrar no banco criado
sqlite> .exit
user@host:~$ .sqlite3 meuBanco.db
sqlite>
No segundo caso, consideremos os seguintes bancos:
user@host:~$ .sqlite3 meuBanco.db
sqlite> .schema
CREATE TABLE alunos(matricula INTEGER NOT NULL, nome VARCHAR(255) NOT NULL))
CREATE TABLE professores(registro VARCHAR(255) NOT NULL, nome VARCHAR(255) NOT NULL))
e o seguinte banco (sendo que a última tabela de teste.db
foi criada e preenchida, porém, ela deveria estar em meuBanco.db
)
user@host:~$ .sqlite3 teste.db
sqlite> .schema
CREATE TABLE irrelevante1(nome VARCHAR(255), sobrenome VARCHAR(255)))
CREATE TABLE irrelevante2(idade INTEGER, acertos INTEGER NOT NULL))
CREATE TABLE estacionamento(vaga INTEGER NOT NULL, cliente VARCHAR(255) NOT NULL, identificador INTEGER))
Para transferirmos a última tabela para meuBanco.db
podemos seguir os paços:
user@host:~$ .sqlite3 teste.db
sqlite> .output temp.sql
sqlite> .dump estacionamento
sqlite> .output stdout
Sendo que os comando:
.output temp.sql faz com que o resultado de coisas que normalmente seriam exibidas no terminal, como comando de listagem de tabela, seja enviado para um arquivo (no caso, o nome escolhido para o arquivo foi temp.sql
), caso já exista um arquivo com o nome escolhido ele será sobreescrito.
.dump estacionamento despeja o conteúdo da tabela escolhida em formato SQL (caso não seja especificada uma tabela, será despejado todo o conteúdo do banco). Como optamos por jogar as saídas em um arquivo específico (com o comando anterior), os dados serão despejados naquele arquivo.
.output stdout faz com que a saída volte para a tela, ou seja, a partir daqui os comandos efetuados serão efetuados serão aplicados ao banco atual, e não mais ao arquivo escolhido anteriormente.
Agora podemos importar a tabela para meuBanco.db
. Uma forma da fazer isso (caso não exista uma tabela com o nome estacionamento
no banco)
user@host:~$ .sqlite3 teste.db < temp.sql
se a tabela já existir devemos exluí-la antes da importação dos novos dados, caso isso não seja feito haverá dados duplicados na tabela resultante (já que, na importação, ocorre a união entre as tabelas).
Alguma dúvida, correção ou adendo sobre o que foi postado? Escreva um comentário ou mande um email :D
Comments