Use the MOLT Verify tool

On this page Carat arrow pointing down

This feature is in preview. This feature is subject to change. To share feedback and/or issues, contact Support.

MOLT Verify checks for data discrepancies between a source database and CockroachDB during a database migration.

The tool performs the following verifications to ensure data integrity during a migration:

  • Table Verification: Check that the structure of tables between the source database and the target database are the same.
  • Column Definition Verification: Check that the column names, data types, constraints, nullability, and other attributes between the source database and the target database are the same.
  • Row Value Verification: Check that the actual data in the tables is the same between the source database and the target database.

For a demo of MOLT Verify, watch the following video:

Supported databases

The following databases are currently supported:

Install and run MOLT Verify

To install MOLT Verify, download the binary that matches your system. To download the latest binary:

Operating System AMD 64-bit ARM 64-bit
Windows Download Download
Linux Download Download
Mac Download Download

For previous binaries, see the MOLT version manifest. For releases v0.0.6 and earlier, see the MOLT repository.

To set up MOLT Verify:

  1. Rename the binary to molt and add it to your PATH so you can execute the molt verify command from any shell.
  2. Get the connection strings for the source database and CockroachDB.
  3. Make sure the SQL user running MOLT Verify has read privileges on the necessary tables.
  4. Run MOLT Verify:

    The molt verify command takes two SQL connection strings as --source and --target arguments.

    To compare a PostgreSQL database with a CockroachDB database:

    ./molt verify \
      --source 'postgresql://{username}:{password}@{host}:{port}/{database}' \
      --target 'postgresql://{username}:{password}@{host}:{port}/{database}?sslmode=verify-full'

    To compare a MySQL database with a CockroachDB database:

    ./molt verify \
      --source 'mysql://{username}:{password}@{protocol}({host}:{port})/{database}' \
      --target 'postgresql://{username}:{password}@{host}:{port}/{database}?sslmode=verify-full'

    You can use the optional supported flags to customize the verification results.

  5. Review the verification results:

    Running the MOLT Verify tool will show if there are any missing rows or extraneous tables in the target database. If any data is missing, you can add the missing data to the target database and run ./molt verify again.


    Be aware of data type differences. For example, if your source MySQL table uses an auto-incrementing ID, MOLT Verify will identify a difference in the table definitions when comparing with CockroachDB's UUID type. In such cases, you might have to perform extra steps, such as creating composite types within the target database that use the auto-incrementing ID and other types to maintain referential integrity.

Supported flags

Flag Description
--source (Required) Connection string for the source database.
--target (Required) Connection string for the target database.
--concurrency Number of shards to process at a time.
Default: 16
For faster verification, set this flag to a higher value.
--row-batch-size Number of rows to get from a table at a time.
Default: 20000
--table-filter Verify tables that match a specified regular expression.
--schema-filter Verify schemas that match a specified regular expression.
--continuous Verify tables in a continuous loop.
Default: false
--live Retry verification on rows before emitting warnings or errors. This is useful during live data import, when temporary mismatches can occur.
Default: false


  • While verifying data, MOLT Verify pages 20,000 rows at a time by default, and row values can change in between, which can lead to temporary inconsistencies in data. Enable --live mode to have the tool retry verification on these rows. You can also change the row batch size using the --row_batch_size flag.
  • MySQL enums and set types are not supported.
  • MOLT Verify checks for collation mismatches on primary key columns. This may cause validation to fail when a STRING is used as a primary key and the source and target databases are using different collations.
  • MOLT Verify only supports comparing one MySQL database to a whole CockroachDB schema (which is assumed to be public).
  • MOLT Verify might give an error in case of schema changes on either the source or target database.
  • Geospatial types cannot yet be compared.

See also

Yes No
On this page

Yes No