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';