Skip to content

MySQL To PostgreSQL

MySQL is the richest source pgferry handles — enums, sets, unsigned types, generated columns, optional PostGIS, and collation handling all live here. If your source is actually MariaDB, hop over to the dedicated MariaDB guide instead of assuming every MySQL-specific feature carries over unchanged.

MySQL-specific options to decide deliberately

Section titled “MySQL-specific options to decide deliberately”
  • enum_mode
  • set_mode
  • tinyint1_as_boolean
  • binary16_as_uuid
  • string_uuid_as_uuid
  • widen_unsigned_integers
  • add_unsigned_checks
  • ci_as_citext
  • [postgis]
  • generated columns are copied as values, not recreated as expressions
  • unsupported indexes such as FULLTEXT, prefix indexes, and expression indexes are reported and skipped
  • single_tx is available when you need one consistent snapshot on a live source
  • zero dates need explicit handling through zero_date_mode

Once the MySQL side is sorted, these destination playbooks layer on the provider connection, TLS, pooling, and firewall setup:

PlanetScale, RDS, and Cloud SQL are all MySQL under the hood — the type behavior above applies unchanged — but each brings its own access, TLS, and firewall quirks. These guides cover the source-side specifics: