Apache Fineract on PostgreSQL vs MariaDB or MySQL

Fineract's README recommends PostgreSQL and deprecates MariaDB and MySQL under FSIP-9. This page explains what that means for new deployments, existing MariaDB installs and the work a move requires.

On this page

Which database should you run Apache Fineract on?

For a new Apache Fineract deployment, start on PostgreSQL. The Fineract README names PostgreSQL as the recommended database, and MariaDB and MySQL are both marked deprecated under proposal FSIP-9, which standardizes the project on PostgreSQL. Deprecated does not mean unsafe, but it does mean MariaDB and MySQL are no longer the path the project tests, documents and packages by default, so every upgrade, driver change and troubleshooting question will land on a database the community is moving away from. Staying on MariaDB is a defensible choice only when it is deliberate and time-boxed. The strongest reasons are operational: your team already runs MariaDB well, you depend on Galera synchronous multi-primary clustering or MariaDB-specific features, or you have a standard MariaDB estate with backup and monitoring already in place. In that case, write down the target date for a move, confirm with your own infrastructure team which MariaDB release line you will stay on, and check the support windows published by the MariaDB Foundation against your planned migration date. If none of those reasons apply, a fresh install on MariaDB adds a migration you will have to pay for later.

If you are already on MariaDB or MySQL, plan the move as a project rather than a driver swap. Fineract does not ship the MySQL or MariaDB JDBC driver in its official Docker image, so you must supply it yourself and override the default database settings, and that setup becomes a recurring item in each release. Before you schedule the cutover, ask your implementation partner or internal team to confirm the migration path for your Fineract version, the data volume, the tenants database, and the rollback plan. The Fineract documentation also notes that Liquibase migrations run only on write instances, which matters when you rehearse the switch. Treat the rehearsal as the deciding test: if the migrated copy passes your reconciliation and reporting checks, the move is ready.

PostgreSQL and MariaDB or MySQL for Fineract, factor by factor

This table compares PostgreSQL and MariaDB or MySQL for running Apache Fineract across licensing, official status, driver packaging, release windows, replication and what your team must add. Read each row against your own compliance, support and operating constraints, since the facts favor PostgreSQL on official status and packaging while MariaDB offers its own replication and clustering features.

FactorPostgreSQLMariaDB or MySQL
LicensePostgreSQL License, a permissive license similar to BSD or MITMariaDB Server is GPLv2; confirm how GPLv2 terms fit your distribution and policy
Official status in FineractRecommended database under the Fineract READMEDeprecated under FSIP-9; the README asks users to override settings themselves
JDBC driver in official Docker imagePostgreSQL JDBC driver includedNot included; you must download the driver and override database settings
Major release support windowEach major version supported for 5 years after initial release (PostgreSQL versioning policy)LTS community binaries supported 3 years after GA, then 2 more years for critical and security fixes
Replication and high availabilityHot standby, synchronous and asynchronous replication; logical replication across major versionsAsynchronous, semi-synchronous and parallel replication, plus Galera synchronous multi-primary clustering
Automatic failoverNot provided by PostgreSQL itself; external tools requiredClustering features cover failover; confirm the approach for your chosen topology
What your team must addFailover tooling, backup and point-in-time recovery setup, connection pooling such as PgBouncerDriver management, Fineract configuration overrides, and confirmation of Fineract behavior on your chosen version

Why the official image only works out of the box with PostgreSQL

The official Fineract Docker image includes only the PostgreSQL JDBC driver. The MySQL and MariaDB drivers are not bundled because of license incompatibility, so a team that runs Fineract on MariaDB or MySQL cannot simply pull the image and point it at a database. The Fineract README tells those users to download the JDBC driver themselves and override the default database settings. In practice, that means the team must place a driver that matches its database version into a custom image, then set the datasource properties, such as the JDBC URL, username and password, so the write and batch instances connect to the right database. Confirm the exact driver version and property names against the Fineract README and the platform documentation for the release you plan to deploy before you write the build.

This is recurring build and release work, not a one-time setup. Each time the team moves to a new Fineract release, it must rebuild its image, confirm the driver still loads, retest the database connection, and re-verify the settings it overrode. Fineract publishes official releases quarterly, so that cycle repeats several times a year. The same applies to the driver itself, which the team must track for security fixes and compatibility with the MariaDB or MySQL server version it runs. Ask your DeployOpen or in-house platform owner to name who owns the image pipeline, who approves a driver upgrade, and how a failed build is handled before a production change window. Teams that standardize on PostgreSQL avoid this loop entirely, which is the practical reason the deprecation matters for operating cost.

How an existing MariaDB installation should plan a move

This sequence turns an existing MariaDB-backed Fineract deployment into a tested PostgreSQL deployment with a documented cutover and a rollback path. Each step ends with a check the team can verify before moving on.

  1. Inventory the current versions and dependencies

    The platform or infrastructure owner records the exact MariaDB server version, the Fineract release and image tag in use, and the MySQL or MariaDB JDBC driver and database settings that the deployment overrides. The team also lists every system that reads from the database, including reporting jobs, batch instances, read replicas, backup tooling and any integration that connects directly with SQL. The step is done when this inventory is reviewed by the application owner and the database administrator, and any connection that bypasses the Fineract API is flagged for separate review.

  2. Confirm the MariaDB lifecycle for the release line

    The database owner checks the MariaDB Foundation's published notes for the release line in use, since long-term releases receive community binaries for a fixed period followed by critical and security fixes only, and rolling releases end on a shorter cycle. The team should confirm the end-of-life date for its specific line with the Foundation's current announcements rather than relying on memory or older blog posts. The step is done when the team has written down the support end date for its current line and the date by which it must have moved, so the migration plan has a documented deadline driver.

  3. Stand up a PostgreSQL copy with the driver

    The platform engineer builds a non-production environment that matches the production Fineract version and deploys it against a PostgreSQL server, using the official image, which ships the PostgreSQL JDBC driver. The team confirms that database settings, tenant definitions in the tenants database and the Liquibase migration path work on an empty schema before any data is loaded. The step is done when the application starts cleanly, the migrations complete on write instances, and an administrator can log in and reach the API health endpoint.

  4. Rehearse the data move on the copy

    The database administrator loads a recent copy of production data into the PostgreSQL environment using a conversion method the team has scoped and tested for MariaDB-to-PostgreSQL movement, which is a different exercise from a PostgreSQL major version upgrade. Type differences, character sets, sequence values, decimal precision and date handling are checked table by table, and the team records every row count and any transformation it needed. The step is done when the rehearsal completes end to end and each discrepancy has an agreed fix or an explicit accepted exception.

  5. Validate balances, reports and tenant data

    Finance and operations staff compare account balances, loan schedules, savings positions, journal entries and client records between the MariaDB source and the PostgreSQL copy, using reports that the business relies on. The team also runs the reporting jobs, tenant-specific configurations and any batch processes against the copy and compares outputs. The step is done when the business owner signs off on a written reconciliation that covers every product and tenant in scope, with differences explained.

  6. Plan cutover with a rollback path

    The team schedules a cutover window, freezes writes on the MariaDB source, performs a final data load, and switches the application configuration to the PostgreSQL database. The plan must state who can call the rollback, what triggers it, and how transactions written after cutover would be handled if the team returns to MariaDB, because a rollback that loses posted entries is not a rollback. The step is done when the runbook has been rehearsed once and the rollback decision criteria are approved in writing by the operations and business owners.

  7. Retain the source and confirm post-cutover operations

    After cutover, the team keeps the MariaDB source read-only for an agreed retention period and verifies backups, restore tests and monitoring on the PostgreSQL side, including replication, failover and point-in-time recovery choices, which PostgreSQL leaves to external tooling for automatic failover. The team confirms that the PostgreSQL support window for the chosen major version is recorded in its maintenance calendar. The step is done when a restore from the new backups has been tested and the decommissioning date for the MariaDB source is recorded in the change log.

Which path fits which team

If you are deploying Apache Fineract with no existing database, PostgreSQL is the direction to take. The project's README names PostgreSQL as the recommended database, and the official Docker image includes the PostgreSQL JDBC driver, so you avoid driver packaging work from day one. Your choice is then about operating PostgreSQL well in your own infrastructure.

  • Driver packaging: The official image ships only the PostgreSQL JDBC driver, so the standard image runs without extra driver files.
  • Support window: PostgreSQL 18 is supported until November 14, 2030, and PostgreSQL 17 until November 8, 2029, which gives you a long planning horizon.
  • Replication: Hot standbys support read-only queries, and you can choose synchronous or asynchronous replication.
  • Failover: PostgreSQL does not detect a primary failure on its own, so you must select, deploy and test an external failover tool.
  • Read scaling: Fineract's documentation recommends one write instance, one batch instance and several read instances on read replicas for high load.

The main condition that would change this is an existing organizational standard for MariaDB or MySQL that your operations team cannot waive. Confirm with your Fineract release notes which PostgreSQL versions the release is tested against, and plan connection pooling before you size the database tier.

What running PostgreSQL under Fineract requires

Fineract standardizes on PostgreSQL, so the database version policy, upgrade path, replication design and authentication model become part of the platform you run. The cards below cover what your team must plan, check and own once PostgreSQL is the database under your core banking system.

Pick a supported major version

Supported PostgreSQL majors have different end dates: 14 runs to November 12, 2026, 15 to November 11, 2027, 16 to November 9, 2028, 17 to November 8, 2029 and 18 to November 14, 2030. A new Fineract deployment should start on a major still inside its window with room for the planned go-live and operating period. Check which major your Fineract release and your DBA standards expect, and put the end-of-support date on the upgrade calendar from day one.

Apply minor updates with restarts

Minor PostgreSQL releases do not change the internal storage format, so applying one means replacing the executables and restarting the server. Your team still has to schedule a maintenance window for each restart, test the Fineract write and batch instances against the new binaries, and confirm that the image or host tooling you use applies the patch consistently across environments. Ask your platform or DBA lead who owns this cycle and how often it runs.

Plan major upgrades in advance

Major upgrades use pg_dumpall with restore, pg_upgrade, or logical replication. Logical replication can limit downtime to several seconds, but it needs careful setup and validation of the Fineract schema, including Liquibase state. Pick the method during planning, rehearse it on a copy of production data, and record the rollback path before the change window opens.

Design replicas for read load

PostgreSQL supports hot standby servers that serve read-only queries, with either synchronous replication, where a commit waits for standbys, or asynchronous replication. Fineract's documented pattern uses one write instance, one batch instance and several read instances on read replicas for high load. Choose synchronous or asynchronous mode based on how much data loss your financial records can tolerate, and confirm that read-only instances do not run writes or migrations.

Add external failover tooling

PostgreSQL does not detect a primary failure and notify the standby on its own, so automatic failover needs external tools. Your team must select, deploy, test and operate that tooling, along with the connection routing that points Fineract at the new primary. Ask whether the failover design has been exercised against Fineract's write instance and whether the runbook covers batch jobs that were running at the time of failure.

Choose modern authentication methods

PostgreSQL documents password, GSSAPI, SSPI, LDAP, RADIUS, certificate, PAM and OAuth methods. PostgreSQL 18 adds an OAuth 2.0 method and deprecates MD5 password authentication in favor of SCRAM. Set password_encryption to SCRAM and confirm that the Fineract database account, the tenants database and any service accounts all authenticate with SCRAM or certificates. Confirm the driver version in your Fineract build supports the method you select.

Questions teams ask before moving Fineract off MariaDB

Can our team migrate Fineract from MariaDB to PostgreSQL ourselves?

Yes, a capable team can, but the work is more than a database dump and restore. The migration touches the schema, the JDBC configuration, the tenants database, and every environment that connects to Fineract. Your team needs enterprise Java skills to rebuild and configure the application, database administration skills for PostgreSQL, and someone who understands your core banking data well enough to test reconciliation after cutover. The Fineract README notes that a proper production deployment can be complex, costly and time-consuming and may need enterprise Java skills or a vendor, so check honestly whether those skills sit in-house today.

What drives the cost and effort of a Fineract database migration?

The main drivers are the number of environments, the data volume, the custom reports, the number of tenants, and how deep the testing goes. Each environment, from development through production, needs its own rebuild, data load and verification. Custom reports and any integrations that query the database directly must be rewritten or retested against PostgreSQL. Multi-tenant setups add work because each tenant's connection and data must be validated. Cost is mostly people time: internal engineers, a database administrator, and any partner you hire. Ask a partner to price each driver separately in a written scope so you can see which ones you can reduce.

How long does a Fineract move to PostgreSQL take?

No reliable duration can be stated from the sources available, and the length depends on your environment, not on a generic rule. The timeline is set by data volume, how many environments need rebuilding, the scope of custom reporting and integrations to retest, the depth of reconciliation testing, and how much cutover rehearsal your risk appetite requires. Ask any partner for a written scope that lists each phase, its entry and exit criteria, the environments covered, the testing approach, and the dates they commit to. A fixed-scope agreement with agreed deliverables makes the timeline easier to compare across bids.

Can we keep running MariaDB with Fineract, and for how long?

MariaDB can keep running for now, but Fineract's README marks MariaDB and MySQL as deprecated under FSIP-9, and the official Docker image includes only the PostgreSQL JDBC driver. If you stay on MariaDB, you must download the JDBC driver yourself and override the default database settings, and you carry that maintenance on every upgrade. For MariaDB's own support horizon, check the MariaDB Foundation's release windows: new long-term releases are announced yearly with community binaries supported for 3 years after GA, plus 2 more years of critical and security fixes. Compare that against the Fineract releases you plan to run, since Fineract's release notes will show when deprecated paths stop being tested.

Does PostgreSQL failover need extra tooling beyond replication?

Yes. PostgreSQL supports hot standby servers that serve read-only queries, along with synchronous and asynchronous replication, but it does not include software that detects a primary failure and promotes a standby. Automatic failover requires an external tool or orchestration layer that you select, deploy, test and operate. Your design choices include whether commits must wait for standbys (synchronous replication, which trades write latency for durability) and how connections are redirected after promotion. Connection pooling with PgBouncer is often part of this design. Confirm the failover approach in your written scope, and test it under realistic failure conditions before go-live.

When should we bring in an outside partner for this migration?

Bring in a partner when your team lacks the Java, PostgreSQL or banking reconciliation skills to carry the work safely, or when the cutover window cannot absorb trial-and-error. DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside your own infrastructure, and most engagements are fixed-scope with scope, deliverables and timelines agreed in writing before work starts. DeployOpen does not publish a price list, so ask for a quote that follows from the written scope. Ask any firm to name who will own data validation, rollback and post-cutover support.

Upgrades, backups and monitoring on each database

This table compares how each database handles upgrades, backup and point-in-time recovery, replication and failover, and monitoring for a Fineract deployment. Read each row as a question to answer in your own environment, since the documented tooling sets the baseline but your runbooks, hosting and staffing decide the result.

Operational areaPostgreSQL (Fineract's standard)MariaDB or MySQL (deprecated for Fineract)
Minor version updatesMinor releases do not change the storage format, so updating means replacing executables and restarting the serverConfirm the minor update path and driver compatibility with your MariaDB or MySQL version and the Fineract release you run
Major version upgradesDocumented options include dump and restore, pg_upgrade, or logical replication, which works across major versions with only several seconds of downtimeConfirm the supported upgrade procedure for your MariaDB line, since MariaDB releases follow a separate long-term and rolling schedule
Continuous archiving and point-in-time recoveryPostgreSQL documents continuous archiving with base backups and WAL archiving for point-in-time recovery; confirm the tooling you choose and test restoresConfirm the backup and point-in-time recovery method for your engine and storage engine, and test restores in your environment
ReplicationHot standby servers serve read-only queries, with synchronous or asynchronous replication availableMariaDB offers asynchronous, semi-synchronous and parallel replication with global transaction IDs, plus Galera multi-primary clustering
Automatic failoverPostgreSQL does not detect primary failure or notify standbys itself, so you need an external failover tool and must test itConfirm which failover mechanism applies to your topology, including Galera or replication manager tooling
Connection managementConfirm pooling needs with your team, for example PgBouncer, alongside Fineract's read and write instance patternConfirm how your connection pooling and read routing handle Fineract's read and write instance types
Monitoring and staffingTeams need PostgreSQL operations skills for replication, backups and failover; confirm the monitoring stack and alert ownershipTeams need MariaDB operations skills and must keep a JDBC driver and overrides under their own control, since the official image does not ship one
Vendor support and ownershipAsk your implementation partner which runbooks, backup tests and failover drills are in scope and who owns them after handoverConfirm who supports the database and the custom driver setup for the lifetime of the deployment

Where DeployOpen fits in a database move

DeployOpen plans, implements, hardens, backs up and documents self-hosted platforms inside your own infrastructure, and a database move is usually scoped that way too. For a Fineract deployment, that means the work covers the pieces this topic turns on: the database driver packaging, the datasource and tenant connection settings that point Fineract at the database, the Liquibase migration path, the backup and restore routine, and the runbook your operations team will follow afterward. DeployOpen does this work in your cloud accounts, data centers or air-gapped network, so the database stays under your control throughout.

A move from MariaDB or MySQL to PostgreSQL is normally agreed as a fixed-scope engagement. Before work starts, both sides should write down which environments are in scope (development, test, production and the tenants database), which data migration method will be used, how cutover and rollback will be run, and which deliverables will be handed over, such as configuration records, test evidence and updated operating documentation. Ask for the scope, deliverables and timeline in writing, and ask what is excluded, for example application code changes or licensing of any database engine. Confirm with your own team whether any compliance evidence needs to come out of the change, and confirm with the independent auditor, if one applies, what they will expect to see.

How DeployOpen scopes and delivers a Fineract database move

DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure. For Apache Fineract, that means treating the database choice as a scoped change to a running system, with the migration path, testing and evidence agreed in writing before any work begins.

How we scope

  • Confirm which database each Fineract environment runs today, including tenants, read instances and any MariaDB or MySQL driver overrides.
  • Agree in writing whether the target is PostgreSQL, with the migration path, cutover window and rollback steps set out as deliverables.
  • Ask for a written quote that separates the assessment, migration, testing and documentation work, so each cost component is visible.

How we build

  • Build the database connection configuration, JDBC driver packaging and Liquibase migration runs against a copy of your environment first.
  • Test tenant connections, read replica behavior and batch jobs on the target database before any production data is moved.
  • Document each configuration key, image change and verification step so your team can repeat the process on other environments.

How we hand over

  • Deliver runbooks for the cutover, rollback and post-move checks, written so your operations staff can follow them without us.
  • Walk your team through the new backup and restore procedure, and record which PostgreSQL version and settings were deployed.
  • Provide evidence of testing and configuration for your own assessors, while leaving any audit or certification to independent bodies.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, scoped separately from the migration project.
  • Retainers can cover PostgreSQL minor updates and future Fineract release upgrades, with the work agreed in writing.
  • Confirm with us during scoping which responsibilities stay with your team and which sit under a retainer or a later engagement.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.