Ce projet est énorme : il vise à remplacer NexusDB par PostgreSQL dans toutes mes applications (déployées en clientèle) en utilisant les composants pgDAC (qui sont fabuleux). Je recense ici toutes les astuces, trucs à ne pas oublier, etc.
TPgConnection
Ne pas oublier de définir :
Options / UseUnicode = True
Conversion des données
Conversion des DDL (définitions des tables)
Je joue la simplicité : j’ai acquis, il y a quelques années, Database Workbench qui permet de faire Extract DDL et récupérer ainsi les définitions de toutes les tables. Reste à convertir certains types de données :
+-------------+--------------------+
| Type Nexus  | Type PostgreSQL    |
+-------------+--------------------+
| AutoInc     | Serial primary key |
| ShortString | VarChar            |
| DWord       | Int                |
+-------------+--------------------+
Conversion des données
J’utilise le composant TCRBatchMove (dans l’onglet Data Access). Je définis 2 tables, nxMigration reliée à la nxDatabase, l’autre pour pgMigration reliée à la PGConnection.
Dans CRBatchMove1, la source est la table NXmigration, la destination est PGmigration. Attention à définir FieldMappingsMode à mmFieldName au cas où l’ordre ne serait pas rigoureusement le même.
Puis le code suivant pour transférer les données :
procedure TFmain.Button1Click(Sender: TObject);
var sl:TStringList;
    i: Integer;
begin
  sl:=TStringList.Create;
  Try
    DM.dbclefs.GetTableNames(sl);
    for i := 0 to sl.Count - 1 do begin
      DM.nxMigration.TableName:=sl[i];
      DM.pgMigration.TableName:=sl[i];
      DM.CRBatchMove1.Execute;
    end;
    ShowMessage('Done !');
  Finally
    sl.free;
  End;
end;
À peaufiner un peu pour mettre à jour les séquences :
alter sequence clilog_id_seq restart with 81;
Accélérer Locate
pgQuery.IndexFieldNames:='champ1;champ2';
