DuroDBMS stores a version number in the catalog which changes if the catalog tables or the data format changes. If this version number differs between two releases, the two releases are incompatible and accessing a database written by one release from the other release results in a version_mismatch_error.
The catalog version changed with DuroDBMS 1.2 as three new catalog tables were added. To upgrade older database environments there is a Duro D/T script upgrade.td in the subdirectory duro/td.
The upgrade script must be run from the old DuroDBMS version as follows:
durodt -e <dbenv> -d <database> <durodbms path>/duro/td/upgrade.td
where <dbenv> is the database environment directory and <database> is the name of a database.
The script can be used to upgrade database environments which have been creating using DuroDBMS versions 0.26, 1.0, or 1.1. (But notice the difference between 1.0 and 1.1 explained below)
DuroDBMS 1.1 is compatible with DuroDBMS 1.0 with one exception: Expressions containing invocations of the_ operators are stored in a different format. Virtual tables and constraints containing such operator invocations must be dropped under the old version and recreated under the new version.
DuroDBMS 1.0 is compatible with DuroDBMS 0.26. Previous versions are not compatible; data created using these versions can only be migrated safely by creating a new database environment and re-create the database(s), user-defined types and operators, tables and database constraints.
Durodump can be used to extract the real tables and their data from the old DB environment and to import them into the new environment.
When migrating from a Duro version older than 0.16, you may want to take durodump.tcl from the new version and use it under the old version to export the real tables because there are some issues with durodump.tcl in older versions. (For example, the restore script created by Durodump previous to 0.16 always tries to re-create the database which causes a problem if a user-defined type must be re-created first, because this requires a database already to be present)