Cada vez mais as empresas de todos os portes estão procurando soluções corporativas onde possam reduzir os custos de hardwares, softwares, etc no ambiente de TI.

Para isso temos um grande crescimento de ferramentas open source no mercado para competir em pé de igualdade com as ferramentas de software proprietário. Mas como já vi várias pessoas se perguntarem na hora de escolher entre uma ferramentas open source e outra proprietária é , se escolher open source e der pau, quem vai me dar suporte? Para quem devo ligar? Ou até melhor que isso, quem devo culpar?

Mas o que não sabem é que mesmo por serem open source, temos sim muitos profissionais e empresas capacitadas para poder dar todo este suporte e garanto que o serviço executado será muito melhor.

Vendo isso, na área de banco de dados, temos um SGBD que já vem ganhando seu espaço no mercado e com muita robustez, velocidade, segurança está sendo uma grande e valiosa opção na hora de se escolher um para iniciar o seu projeto de software. Estamos falando do POSTGRESQL.

Neste artigo, iremos ver uma operação de migração de um banco de dados SQL SERVER 2000 para POSTGRESQL.

Utilizando o recurso DTS IMPORT/EXPORT WIZARD , poderemos exportar todos os arquivos necessários para serem importados mais tarde no POSTGRESQL.

Como a maioria dos tipos de dados dos dois bancos são idênticas (com exceção de poucos campos, como o serial que o postgres possui e que no sql server é feito através da opção identity), a migração de uma base de dados que é feita no sql server e que precisa ser migrada no postgres é feita de forma tranqüila e rápida.

Claro que temos programas que fazem esta operação, porém nos que fiz testes, não fui muito feliz, devido alguns programas na hora de fazer a importação trazerem nos campos os caracteres " (aspas duplas), dando um grande trabalho se optássemos em utilizar o arquivo que eles exportaram.

Portanto, utilizamos o DTS é uma maneira fácil, rápida e eficiente de exportarmos todos os arquivos do SQL SERVER.

Mão na massa então:

 

O início de nossa exportação de uma base de dados para arquivos que possam ser importados no PostgreSQL é localizar e abrir no menu do SQL SERVER a ferramenta IMPORT AND EXPORT DATA.

Após localizar, vamos abrir esta opção, na qual aparecerá uma janela de boas vindas do DTS (DATA TRANSFORMATION SERVICES IMPORT/EXPORT WIZARD).

 

figura1.jpg

 

Clicando em Next passamos para o próximo nível no qual será escolher De onde iremos exportar os dados, no nosso caso iremos exportar do nosso Banco Local, ficando na primeira opção Data Source como Microsoft OLE DB Provider for SQL Server, na segunda opção Server como (local), e depois colocando o usuário e senha para conexão do banco de dados. Depois destas opções ainda temos a última e mais importante, na qual será a escolha do banco de dados no qual iremos nos conectar para exportação.

 

figura2.jpg

 

Escolhendo todas estas opções, passamos para a próxima parte que será a escolha do destino dos arquivos de exportação do banco de dados.

Como fizemos na primeira parte, iremos preencher todas as opções para o destino do arquivo, no nosso estudo de caso, como é exportar para arquivo Texto, iremos escolher na opção Destination a opção Text File.

Feito isso, irá aparecer na parte debaixo da tela uma caixa para colocarmos o local onde será salvo o arquivo e colocarmos o nome do mesmo.

 

figura3.jpg

 

Passado esta parte, iremos nos deparar com 2 opções de exportação de arquivos, na qual iremos estudar uma a uma:

 

figura4.jpg

 

-- Copy tables and views from the source database

-- Use a query to specify the data to transfer

 

-------------------------- Copy tables and views from the source database

Esta primeira opção é a mais fácil para se exportar os arquivos , pois ele irá exportar todas as colunas da tabela selecionada, não dando a opção de se preferirmos escolher apenas algumas colunas para exportar os arquivos, no caso fazendo um Select para isso.

-------------------------- Use a query to specify the data to transfer

Esta segunda opção é a que vem para completar a primeira, pois ela nos dá uma liberdade para exportar apenas algumas colunas de uma tabela, tal processo sendo feito através do Select. Através desta segunda opção podemos utilizar todos os recursos que o select nos oferece, como group by, order by, inner join, etc.

** Esta segunda opção é uma boa opção para empresas de software house que necessitem migrar o banco de uma outra empresa para se adequar ao de sua empresa, pois nem sempre os dados são iguais.

 

Depois de termos visto a diferença entre as duas opções de exportação vamos utilizar um exemplo de cada para que possamos não ter problemas na hora de escolher qual utilizar.

 

------------------------- Utilizando Copy tables and views from the source database

 

Após clicarmos na opção Copy tables and views from the source database irá seguir uma tela onde iremos escolher qual será a tabela a ser exportada, se nosso arquivo será delimitado ou se será fixado por campos, qual o modelo de arquivo, qual será a delimitação de cada linha, qual será a delimitação de coluna e como o texto será qualificado, ou seja, como será que os dados aparecerão no arquivo texto.

 

Vale a pena vermos as opções mais importantes desta tela que são: File Type, Row delimiter, Column delimiter, Text qualifier

 

- File Type --> podem ser no padrão ANSI, OEM, UNICODE. Para não termos problemas com relação à importação no Postgres o melhor é sempre deixarmos em ANSI.

 

- Row delimiter --> podem ser {CR} {LF},{CR},{LF},Semicolon,Comma,Tab,Vertical Bar, <none>. Para não haver problemas, deixamos sempre em {CR} {LF}.

 

- Column delimiter --> podem ser Comma,Semicolon,Tab e Vertical Bar. Por padrão deixemos sempre em Vertical Bar, para ficar mais fácil na hora de importarmos o arquivo no postgres.

 

- Text qualifier --> Double Quote ("), Single Quote () e <none>.Nesta opção é que tá a grande sacada em que os programas de exportação que temos hoje no mercado não viram, pois quando utilizamos programas, eles sempre jogam os arquivos com o Text Qualifier em Double Quote ("), portanto na hora em que iremos importar, os registros ficarao com " . Sempre deixemos como <none> para não termos problemas com o postgres.

 

figura5.jpg

 

Além destas opções temos também a opção de Transform (botão localizado no canto inferior direito) no qual poderemos fazer conversão dos tipos de dados existente nas tabelas, nomes das colunas, entre opções interessantes.

 

figura6.jpg

 

Clicando no botão Next, iremos para a última parte de nossa exportação de arquivo, que é a programação de horário de execução da exportação ou até mesmo o salvamento da DTS para que possamos utilizar mais tarde na mesma tabela.

É sempre bom salvarmos todas as DTS que iremos fazer para que se precisarmos futuramente, ja temos como utilizar sem perder tempo.

Após rodar o DTS, ele irá salvar o arquivo no local determinado no destination, portanto agora é só jogar ele no servidor de postgres e fazer a importação, porém primeiro iremos ver a segunda opção do DTS , Use a query to specify the data to transfer.

 

figura7.jpg

 

 

------------------------- Utilizando Use a query to specify the data to transfer

 

Nesta opção Use a query to specify the data to transfer como o próprio nome diz, iremos criar uma query para poder especificar quais dados iremos querer exportar, pois as vezes não nos interessa exportar uma tabela inteira para arquivo texto, tendo necessidade apenas de uns 5 ou 10 campos.

Quando clicarmos nesta opção e clicarmos no Next ira aparecer uma caixa em branco na qual iremos poder digitar o comando SQL para poder estar exportando para um arquivo texto. Neste comando SQL poderemos usar e abusar de inner join, order by, group by, union , etc, pois ele aceita tranquilamente.

Se preferir para não ter que ficar digitando toda a instrução SQL, poderá utilizar o assistente Query Builder, no qual irá lhe guiar em todos os passos para fazer a exportação dos arquivos texto.

Se tiver algum script SQL já pronto tb poderá usar , clicando no botão Browse.

Para testar se sua sentença SQL deu certo, basta clicar no botão Parse para que ele valide sua sentença.

Depois de terminado este passo, basta clicar em Next, no qual irá cair nos passos acima onde irá escolher o tipo de file type, row delimiter, column delimiter, text qualifier.

E depois é só exportar o arquivo para texto, e pronto, finalizamos nossa parte com o SQL Server, tendo agora uma fácil missão para nosso amigo PostgreSQL.

 

figura8.jpg

 

--------------------------- Importando arquivo texto no Postgres

 

Depois do arquivo texto salvo no SQL Server, iremos ver como devemos fazer a importação dele no Postgres.

Primeira coisa a fazer é jogar o arquivo no servidor do SGBD, tanto faz se ele é Windows ou Linux (via WinSCP, Samba, SSHFile Transfer).

Após feito isso, iremos conectar em nosso banco banco Postgres para poder importar o arquivo texto.

Devidamente conectados no banco utilizaremos o comando Copy From para poder importar o arquivo.

 

utilizando a seguinte sintaxe

 

Copy tabela from /caminho/arquivo.txt with delimiter |;

 

Com este comando iremos importar o arquivo com todas as colunas da tabela.

 

Copy tabela (campo1,campo2,campo3) from /caminho/arquivo.txt with delimiter |;

 

Com este comando iremos importar o arquivo com apenas algumas colunas da tabela.

 

Iremos importar nosso arquivo texto para uma tabela do banco de dados postgres.

Pronto, nossa migração de SQL SERVER para PostgreSQL está feita.

Agora é só repetir os passos para quantas tabelas quiser e começar a utilizar este grande banco de dados.