Fórum converter firebird para postgree #26244
19/01/2005
0
caros amigos, tenho um cliente que roda minha aplicação com firebird, agora ele quer os dados na internet, ja fiz esses teste so que com o firebird fica muito lento usando adsl, e o cliente nao quer gastar muito.
Fiz uma sugestão de mudança de banco e optei para o postgree, so que agora tenho um problema de migração de banco,
Se alguem tiver algum software para conversão tipo o datapump, para converter o firebird para o postgree agradeceria muito, ou outra solução qualquer.
Grato
Fernando
Fiz uma sugestão de mudança de banco e optei para o postgree, so que agora tenho um problema de migração de banco,
Se alguem tiver algum software para conversão tipo o datapump, para converter o firebird para o postgree agradeceria muito, ou outra solução qualquer.
Grato
Fernando

Fernando
Curtir tópico
+ 0
Responder
Posts
29/01/2005
Bon Jovi
1º - Use o Case Studio por exemplo pra poder converter o schema da base, ele gera a script toda. É só fazer a engenharia reversa da base origem e depois mandar converter pra base desejada. É simples, mas se tiver dúvidas ao usá-lo me fale.
2º - Execute a script de CREATE TABLEs com primary keys e índices na base nova de destino. Atenção: nao execute a script de foreign keys.
3º - Faça a importação dos dados. Faz um programinha mesmo, com um ´while not Eof´ pra lista de tabelas, e pronto. O mais flexível é usar ADO, pq q tem compatibilidade com um maior número de fontes de dados, podendo fazer via provider OLE DB for ODBC.
Exemplo bem básico:
Usei AnsiLowerCase na tabela pro caso do PostgreSQL usando ADODataSet/ADOQuery, q dá pau no Post, não encontrando a tabela se não passar em minúscula. Com ClientDataSet não dá pau. Provalmente os DataSets ADO devem passar pro servidor a tabela entre aspas. Então isso aí resolve.
4º e último - Execute o resto da script (foreign keys, etc).
2º - Execute a script de CREATE TABLEs com primary keys e índices na base nova de destino. Atenção: nao execute a script de foreign keys.
3º - Faça a importação dos dados. Faz um programinha mesmo, com um ´while not Eof´ pra lista de tabelas, e pronto. O mais flexível é usar ADO, pq q tem compatibilidade com um maior número de fontes de dados, podendo fazer via provider OLE DB for ODBC.
Exemplo bem básico:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin //Memo1 contem a lista de tabelas a serem importadas //Vc pode usar GetTableNames do Connection se achar necessario //(ADOConnetion1.GetTableNames(Memo1.Lines);) for i := 0 to Memo1.Lines.Count - 1 do Importa(Memo1.Lines[i]); end; procedure TForm1.Importa(Tabela: string); var i: integer; begin if Trim(Tabela) = ´´ then Exit; ADODataSetOrigem.Close; ADODataSetOrigem.CommandText := ´SELECT * FROM ´ + AnsiLowerCase(Tabela); ADODataSetOrigem.Open; ADODataSetDestino.Close; ADODataSetDestino.CommandText := ADODataSetOrigem.CommandText; ADODataSetDestino.Open; while not ADODataSetOrigem.Eof do begin ADODataSetDestino.Insert; for i := 0 to ADODataSetOrigem.FieldCount - 1 do begin ADODataSetDestino.FieldByName(ADODataSetOrigem.Fields[i].FieldName).Value := ADODataSetOrigem.FieldByName(ADODataSetOrigem.Fields[i].FieldName).Value; end; ADODataSetDestino.Post; ADODataSetOrigem.Next; end; ADODataSetOrigem.Close; ADODataSetDestino.Close; end; |
Usei AnsiLowerCase na tabela pro caso do PostgreSQL usando ADODataSet/ADOQuery, q dá pau no Post, não encontrando a tabela se não passar em minúscula. Com ClientDataSet não dá pau. Provalmente os DataSets ADO devem passar pro servidor a tabela entre aspas. Então isso aí resolve.
4º e último - Execute o resto da script (foreign keys, etc).
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)