converter firebird para postgree

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


Fernando

Fernando

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:
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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar