Why the PostgreSQL 14 to 18 upgrade needs a plan before November 12, 2026
If your team runs PostgreSQL 14 in infrastructure you control, plan the move before November 12, 2026, the date PostgreSQL 14 support ends. Moving from 14 to 18 is a planned major upgrade, not a minor update, so it needs its own inventory, rehearsal, cutover window and rollback path. Waiting for the deadline to start leaves little room for the testing that a database carrying production data requires. The PostgreSQL versioning policy releases a new major version about once a year and supports each major version for five years after its initial release. The supported versions and end dates are: 18 until November 14, 2030, 17 until November 8, 2029, 16 until November 9, 2028, 15 until November 11, 2027, and 14 until November 12, 2026. Versions 13 and earlier are already unsupported. Minor releases arrive at least once every three months, but they only replace executables and restart the server, so they cannot move you off 14. Confirm the current support table on the PostgreSQL versioning page before you set internal dates. The official documentation describes three major upgrade routes: dump and restore with pg_dumpall, pg_upgrade, and logical replication. Dump and restore is the simplest to reason about but usually needs the longest outage for large databases. pg_upgrade converts the data directory in place or by copying it, which shortens downtime. Logical replication can keep a new server synchronized with the old one and cut over with a downtime the documentation describes as several seconds. This page covers a direct move from PostgreSQL 14 to PostgreSQL 18, skipping versions 15, 16 and 17. Confirm the route choice and any version-specific caveats in the upgrade documentation for your starting version. The decision you need to make first is which route fits your downtime budget, and that choice depends on the size of the cluster, the write volume and how many extensions and replicas you run. PostgreSQL 18 pg_upgrade keeps planner statistics across the upgrade, which can reduce slow queries right after cutover, and it adds parallel jobs to speed up the process. Record your current extensions, replication topology, backup chain and connection pooling layer now, because each of them changes the sequence of steps. The upgrade also changes authentication behavior. PostgreSQL 18 deprecates MD5 password authentication in favor of SCRAM, so any role still using MD5 needs a planned password change and client testing. Start that inventory now, alongside an extension compatibility check and a rehearsal on a copy of production. A team that starts in the next few months has room to fix findings, while a team that waits until the last weeks before November 12, 2026 usually has to choose between an unverified cutover and missing support.
What changes between PostgreSQL 14 and 18, and what each change asks of you
This table lists the PostgreSQL 18 changes most likely to affect a move off version 14, with the impact of each and the action your team should take before cutover. Read the first four rows as candidates for testing, and the last row as the check that catches changes not covered here. Most changes ask for verification in a rehearsal rather than a configuration change on the day of cutover.
| Change | Impact | Action needed |
|---|---|---|
| Asynchronous I/O | Can change throughput and latency for read-heavy and scan-heavy workloads, so query timings may shift after the upgrade. | Benchmark your critical workloads on production-like hardware during the rehearsal and review the I/O settings in the PostgreSQL 18 documentation. |
| OAuth 2.0 authentication method | A new option for client authentication. Existing password and certificate logins keep working without it. | Adopt only if you plan to use OAuth 2.0 with your identity provider. If so, confirm the validator setup and host-based authentication entries in the authentication docs. |
| uuidv7() function | Adds time-ordered UUID generation. Existing UUID columns and gen_random_uuid() defaults are unaffected by the upgrade. | Decide whether new keys should use uuidv7(). If you adopt it, confirm index size and insert behavior in a test schema before changing defaults. |
| Virtual generated columns by default | Generated columns created without the STORED keyword become virtual, so their values are computed at read time instead of stored on disk. | Export your schema DDL and find every generated column. Choose STORED explicitly where stored values are needed for performance or indexing, then retest queries that read those columns. |
| MD5 password deprecation in favor of SCRAM | MD5-hashed passwords are deprecated. Logins can break if roles or pg_hba.conf entries still assume MD5. | Set password_encryption to scram-sha-256, rehash or reset role passwords, update client drivers if needed, and confirm login tests for every application account before cutover. |
| pg_upgrade retains planner statistics | Planner statistics carry across the major upgrade, which can reduce the post-upgrade period of slower plans. | Confirm in the pg_upgrade documentation how statistics are handled for your path. Still check the execution plans of your most important queries after cutover. |
| pg_upgrade parallel jobs and --swap option | The --jobs option can shorten the data step of an in-place upgrade. The --swap option changes how files are moved and how rollback works. | Test both options in the rehearsal. Confirm the exact behavior and rollback implications of --swap in the pg_upgrade documentation before choosing a mode for production. |
| Removed or changed behavior from 15 to 18 | Changes in each intermediate release can affect SQL behavior, defaults or application assumptions even when the upgrade completes. | Read the full release notes for versions 15, 16, 17 and 18. Log each item that touches your schema, queries, extensions or applications, and test those paths in the rehearsal. |
Choosing pg_upgrade or logical replication for the 14 to 18 path
The choice between pg_upgrade and logical replication comes down to four things: how much downtime the business can accept at cutover, how large the data set is, whether every extension you run supports PostgreSQL 18, and what rollback position each method leaves you in after cutover. Make these decisions in writing before you pick a method, because each one eliminates options. A team with a short maintenance window and a large cluster will usually land in a different place from a team with a few hours of tolerance and a small database. Confirm your actual downtime budget with the application owners first, since that number drives everything else.
Logical replication works between different major versions, which is why the PostgreSQL upgrading documentation describes it as a route to major upgrades with only several seconds of downtime. The cost of that short cutover is setup and ongoing work. You need to configure publications and subscriptions, confirm that tables have primary keys or replica identities, and handle schema changes, sequences and large objects, which logical replication does not carry in the same way as physical copies. Ask your team to inventory tables without primary keys and any DDL that runs during the migration window, because both affect whether the replication stream can stay consistent until cutover.
pg_upgrade is an in-place style migration that rewrites or links the data directory into the new major version's format. It is generally simpler to reason about because the upgrade is a single controlled operation with a documented check step. Its rollback position is different, though. Depending on the mode you choose, the old cluster may no longer be usable once the new one has started writing data, so you should decide in advance whether you can afford to return to PostgreSQL 14 and how you would replay writes made after cutover. Test the rollback path in a rehearsal rather than assuming it will work on the day.
Extension support is a gating question for either method. Check each extension your applications and monitoring depend on against its PostgreSQL 18 release, and confirm the version with the extension maintainer rather than relying on a general statement. An extension that is missing or behind on 18 can stop a pg_upgrade run outright, or force you to change the target version. Record the results in your compatibility inventory so the decision is traceable.
For the detailed comparison of pg_upgrade copy, link, clone and swap modes, and how each one affects disk use and rollback, read the sibling page on those modes. This section only sets the decision criteria. Once you have a downtime budget, data size estimate, extension list and rollback requirement, you can narrow the method quickly and move to the rehearsal plan.
What to inventory and back up before the PostgreSQL 14 to 18 upgrade
These four areas define what the upgrade touches and how you show it can be reversed. The inventory comes first because every other item depends on knowing what runs on the cluster. The backup, rehearsal and dependency work then shapes the cutover plan and the rollback options.
Inventory of databases, extensions and roles
List every database, extension, role and authentication rule on the cluster before choosing an upgrade method. Confirm that each extension has a version that supports PostgreSQL 18, and check with its maintainer if one is unclear. Record which roles still rely on MD5 password hashes, since PostgreSQL 18 deprecates MD5 in favor of SCRAM and those accounts need a password change plan. Capture every pg_hba.conf entry, including certificate, LDAP or PAM methods, so the new cluster can be configured to match.
Verified base backups and archived WAL
Take a base backup and keep the archived WAL files needed for point-in-time recovery, then restore the backup to a separate host to prove it works. A backup that has never been restored leaves recovery untested. Confirm that archive_command is succeeding and that the archive covers the window you may need to roll back to. If you plan to use incremental backups with pg_basebackup and pg_combinebackup, confirm that both tools match the versions in use on your backup and restore hosts before relying on them.
Test environment matching production
Build a staging cluster with the same major version, configuration, extensions, authentication setup and representative data volume as production. Run pg_upgrade --check against a copy of the production cluster first, then rehearse the full upgrade with your application test suite. Compare postgresql.conf settings between the old and new versions and confirm any parameter that changed. Record the duration of each step so the production window is based on measured results. Use anonymized data where production data cannot leave its controlled environment.
Dependent applications, poolers and replicas
List every application, service account, reporting tool, connection pooler such as PgBouncer and replica that connects to the cluster, along with its connection string and driver version. Each one needs a cutover step, whether a configuration change or a restart, and a test against the new server. Replicas and logical replication subscribers follow their own upgrade order, so confirm which nodes can follow the primary and which must be rebuilt. Check PgBouncer version compatibility with your chosen target before the cutover date.
Moving from MD5 to SCRAM password authentication during the upgrade
PostgreSQL 18 deprecates MD5 password authentication in favor of SCRAM, so any role or pg_hba.conf rule that depends on MD5 needs attention before cutover. Start with an inventory on the PostgreSQL 14 source. As a superuser, run a query against pg_authid that selects role names where rolpassword begins with md5. That lists every role whose stored password hash is MD5. Then review pg_hba.conf for lines whose method is md5, and record the database, user and address range each line covers. Give the list to the application owners, because each entry is a login path that must still work on 18.
Passwords have to be re-hashed, and this cannot be done in place. The server stores only the hash, so an MD5 hash cannot be converted to SCRAM without the plaintext. On the source, set password_encryption to scram-sha-256, then change the password for each flagged role with ALTER ROLE. Update the matching entries in your secret store at the same time, so applications do not keep the old value. Role definitions are global objects, and the upgrade documentation describes how they move under pg_upgrade and under logical replication. Logical replication in particular does not copy roles, so confirm how you will create them on the target. Plan this work for the rehearsal, so the cutover run uses the same hashes you will use in production.
Client drivers and connection poolers must support SCRAM-SHA-256 before the target accepts their logins. Inventory every driver, ORM and language library, including JDBC, ODBC, libpq based tools and older scripting modules. Check each version against the authentication methods documentation and your vendor's release notes, because some older builds only negotiate MD5. Connection poolers need separate attention: confirm that PgBouncer, or whichever pooler you run, can authenticate to the server using SCRAM, and check how it stores or passes credentials. Confirm these details in your own environment with the exact versions you deploy. A driver that cannot negotiate SCRAM fails at login, which is an early and visible failure.
Test every login path against the PostgreSQL 18 target before cutover. Include application service accounts, batch and ETL jobs, reporting and BI tools, the replication role, backup tooling, monitoring agents, scheduled scripts and administrator accounts. Test each one from the same host and network path it will use in production, because pg_hba.conf matches on client address as well as role and database. Record the role, database, client version, address and result for each test. Keep the PostgreSQL 14 credentials valid until the cutover is confirmed, so a failed login has a fallback. Any path without a passing test is a blocker for the cutover date.
How pg_upgrade --check and extension compatibility gate the cutover
pg_upgrade --check is a pre-flight mode. It inspects the source cluster and the target binaries and reports incompatibilities without changing any data, so you can run it against production-like copies and against the live source during planning. Its output tells you which objects, data types, or settings block the upgrade and which need attention before you can proceed.
What it validates:
- Catalog-level compatibility between the source major version and the PostgreSQL 18 binaries you installed
- Known data type and object conflicts that would stop the upgrade
- Whether the new cluster's directory, locale, and configuration prerequisites are in place
- Whether the source cluster's extensions and libraries can be loaded by the target
What it does not validate:
- Application SQL that still runs but depends on behavior that changed
- Query performance, including plans that change after statistics are carried over
- Authentication flows, such as clients still using MD5 passwords
- Whether your backup and restore procedure works end to end
Confirm the exact check options and output format for your target version against the official upgrading documentation before writing your runbook. Treat a clean check as a necessary gate, not as evidence the cutover will go smoothly.
Extensions are a separate task because pg_upgrade checks only what it can load and inspect. Each extension must have a build that targets PostgreSQL 18, and that build must match the exact binaries and packaging you will run. An extension that loads cleanly on 14 may have no 18 package, or may need a new release from its maintainer.
Work through the inventory for each database:
- List every installed extension and its installed version in every database, not only the default one
- Confirm a PostgreSQL 18 build exists for each extension and record the package source
- Check for functions, operators, or types removed or renamed in the extension's newer releases
- Record the questions to send to each extension maintainer, such as supported major versions, upgrade scripts, and known incompatibilities
- Note any extension you cannot replace or rebuild, since that becomes a blocking item
For each open question, the answer should come from the maintainer or the packaging source in writing. Do not assume that a build for a neighboring major version works on 18. Keep the answers in the cutover record so that the approver can see which extensions are cleared and which are still open.
Application SQL is where the upgrade most often breaks something that pg_upgrade never reports. Queries, functions, views, and stored procedures stay syntactically valid in many cases, yet they may call functions that were removed or renamed, or depend on behavior the release notes changed. Review is needed for both the database objects and the application code that sends SQL.
Focus the review on:
- Calls to functions, procedures, or system views that were removed or renamed between 14 and 18
- Views, functions, and triggers stored in the database, which pg_upgrade migrates as objects
- Application drivers and connection settings, including password method assumptions
- Generated SQL from ORMs or reporting tools that may use deprecated syntax
- Queries that depend on planner behavior, since statistics carry over but plans can still shift
Run the review against the PostgreSQL 18 release notes and the deprecation list in the same release. Record each finding with an owner and a decision, either fixed before cutover or accepted with a documented test. A clean review is a condition for the cutover, and it is evidence the application team can show to the approver.
Upgrade sequence for PostgreSQL 14 to 18 with checks and rollback points
This sequence moves a PostgreSQL 14 cluster to PostgreSQL 18 in a fixed order, with a check or rollback point before each change that cannot be undone. It ends with a verified upgrade, a recorded rollback path until the retention window for the old cluster closes, and a written record of each check for your change board.
Freeze the inventory of the 14 cluster
Record every database, extension and extension version, authentication rule in pg_hba.conf, role that still uses MD5 password hashes, standby and replica, connection pooler setting, backup job and application that connects to the cluster. Your database team owns the list, and in a DeployOpen engagement we can draft it with you against the written scope. The step is done when the application owners have reviewed and signed the inventory, so nothing new turns up during cutover.
Take and verify backups before any change
Take a full base backup and confirm that archived WAL files cover the period from that backup onward. Restore the backup to a separate host, start it, then run row counts and a set of representative application queries against the restored copy. Label this verified backup as the rollback point for the whole sequence. The step is done when the restored copy starts cleanly and returns the expected results for the test queries.
Run pg_upgrade --check on a copy
Restore a copy of the 14 cluster to a host that has PostgreSQL 18 binaries installed, then run pg_upgrade with the --check option against it. Read every finding: extensions without a version that supports PostgreSQL 18, changed or removed features, and roles or clients that still depend on MD5 password authentication, which PostgreSQL 18 deprecates in favor of SCRAM. Fix each finding on the copy and re-run the check until it reports no problems. Keep the clean check output as evidence for the change plan.
Rehearse the full upgrade on a copy
Run the complete upgrade on a restored copy that matches production for extensions, authentication configuration, standby layout and connection pooler settings. Include the standbys in the rehearsal: confirm in the PostgreSQL upgrading documentation for your chosen method how standbys and replicas are rebuilt or reattached, and write that procedure down as a runbook. Run your application test suite against the upgraded rehearsal copy and record how long each stage took. The step is done when the rehearsal log, the test results and the standby runbook have been reviewed.
Schedule cutover and set go or no-go criteria
Agree the cutover window with application owners, communicate the expected write freeze, and set go and no-go criteria before the window opens. The criteria should include a clean pg_upgrade check, a successful rehearsal, a backup verified within the window, and a named person who can call a rollback. Confirm the backup from the second step is still restorable at the start of the window. Until the upgrade starts, stopping the change is still fully reversible. The step is done when the change record is approved and every criterion has an owner.
Perform the upgrade and record the rollback point
Stop writes, stop the 14 cluster, and run pg_upgrade in the mode chosen during rehearsal. In copy mode the 14 data directory stays intact, so the rollback point is restarting the 14 cluster. Link and swap modes change files in the 14 data directory, so the 14 cluster cannot be restarted safely afterward, and the rollback point becomes the verified backup from the second step. For clone mode, confirm the behavior in the upgrading documentation before the window. Record the mode, the start and end times and the full log output. The step is done when pg_upgrade reports success and the 18 cluster starts.
Run post-upgrade checks and reattach standbys
Start the 18 cluster and confirm the server version, the extension list and the authentication rules. Run the statistics step that your method requires: PostgreSQL 18 pg_upgrade retains planner statistics, but confirm in the upgrading documentation whether a follow-up ANALYZE is still needed for your workload. Run the application test suite and compare key query timings with the 14 baseline. Rebuild or reattach standbys using the runbook from rehearsal, and confirm each standby is streaming and caught up. The step is done when application tests pass and every standby reports caught up.
Update monitoring, pooler and old cluster retention
Point monitoring, backup jobs and the PgBouncer configuration at the 18 cluster, and remove checks and version pins that refer to 14. Check the PgBouncer version you run against the PgBouncer site, since version 1.26.1 was released on October 14, 2026 with security fixes. Set the retention window for the 14 data directory and its backups in writing, based on your data retention policy, and record the date when they will be deleted. The step is done when dashboards show the 18 cluster, the retention date is in the change record, and the old cluster is marked for removal on that date.
Rehearsing the cutover and testing rollback before production
A full rehearsal on a copy of production data is the main risk control for the PostgreSQL 14 to 18 cutover, because it is the only place where your schema, extensions, roles, data volume and application traffic meet PostgreSQL 18 before users do. Restore a recent production backup to a server that matches the target in CPU, memory and storage class, install the same extensions at the versions you will run, and execute the production runbook step by step. Include the MD5 to SCRAM password change and the connection string switch. A rehearsal that skips steps or uses a smaller dataset will not show you how the production window behaves.
The rehearsal should time and record each step separately: pre-upgrade checks, the upgrade or replication catch-up, post-upgrade statistics work, configuration changes and application reconnection. Log every error and warning, then separate known, expected messages from anything new. On statistics, PostgreSQL 18 pg_upgrade retains planner statistics, so compare execution plans for your most important queries before and after the run. Confirm whether an ANALYZE is still needed, and if so, time it. Measure application latency from the client side, at the percentiles your service levels use, and record connection errors from PgBouncer or any other pooler in the path.
Write pass and fail criteria before the first rehearsal run, and agree them with the business owner and the application team, not only the database team. Useful criteria include the maximum allowed cutover window, zero unexpected errors in the upgrade log, every extension loaded at its target version, row counts and checksums matching on agreed tables, key query plans within an agreed tolerance, latency under agreed thresholds, and successful logins for every application role using SCRAM. Also decide who has authority to stop the cutover and what happens when one criterion fails: stop, roll back, or proceed with a recorded risk acceptance.
Rollback testing means proving that you can return traffic to the PostgreSQL 14 cluster and run the application against it. In rehearsal, route connections back, confirm the old cluster starts cleanly, accepts logins and passes your smoke tests. Any writes accepted by PostgreSQL 18 after cutover will not exist on PostgreSQL 14 unless you replicate them back, so define how much data loss is acceptable and who makes that call. Decide how long the old cluster and its data stay available after go-live. That period is a business and risk decision based on how long problems can take to surface. Confirm in the upgrading documentation whether the pg_upgrade mode you choose leaves the old cluster in a usable state.
Backups and point-in-time recovery are the second half of the rollback plan. Before cutover, take a fresh base backup and confirm that WAL archiving is working, so you can restore to a moment just before the window. In rehearsal, restore that backup to a separate host, replay archived WAL to a chosen target time and time the restore. Repeat the test for a backup taken from PostgreSQL 18 once it is in service. If you use incremental backups with pg_basebackup, rehearse reconstruction with pg_combinebackup at restore time. Record who runs each restore step, what event triggers a rollback, and where the runbook is stored.
What drives the effort of a PostgreSQL 14 to 18 upgrade
This table lists the factors that change how much work a PostgreSQL 14 to 18 upgrade takes and how to measure each one on your current clusters. Collect these counts before choosing between pg_upgrade and logical replication, because they often decide which method fits your window. The main takeaway is that extensions, password authentication and rehearsal depth can move effort as much as data size does.
| Driver | Effect on effort | How to measure it |
|---|---|---|
| Extensions | Each extension needs a build or version match for PostgreSQL 18, and an unsupported one can block the chosen method. | List installed extensions in every database and confirm a PostgreSQL 18 version exists for each. |
| Data volume and copy or link mode | Copy modes take longer as data grows. Link mode keeps files in place but leaves the old cluster unusable once the new one starts. | Measure database size per cluster and compare it with the downtime window and rollback plan. |
| Applications and drivers needing SCRAM changes | PostgreSQL 18 deprecates MD5 password authentication in favor of SCRAM, so each role and client library needs review. | Count roles that still have MD5 password hashes and list the client driver versions in use. |
| Replicas and poolers | Each standby must be rebuilt or upgraded, and each pooler's configuration and authentication settings must be updated. | Count standbys, failover tooling and PgBouncer instances, and record their authentication settings. |
| Custom SQL that depends on changed behavior | Functions, views, triggers and scheduled jobs that depend on changed defaults or removed behavior need testing before cutover. | Run the target version checks and your test suite against a copy, then count the failing objects. |
| Availability requirement and rehearsal depth | A short downtime limit pushes the project toward logical replication, which adds setup and verification steps. Each rehearsal run adds more work. | Record the maximum acceptable downtime, the number of planned rehearsal runs and the duration of each run in your environment. |
| Audit and evidence work | Internal governance may require change records, pre and post checks, approvals and retained backups, all of which add documentation work. | List the evidence items and approval stages your governance function requires before the change window. |
Questions buyers ask before hiring help for a PostgreSQL 14 to 18 upgrade
How much does a PostgreSQL 14 to 18 upgrade cost?
Cost depends on the written scope: the number of clusters, the extensions in use, the application changes needed, and how much rehearsal and cutover support you want. DeployOpen does not publish a price list, so a quote follows a written scope. Ask for the split between one-time work (assessment, rehearsals, cutover, documentation) and recurring items (support retainers, monitoring, patching). Expect the quote to name what the client provides, such as test environments and staff time, because those inputs change the total. Ask which items are fixed and which are priced per cluster or per change request.
How long does a PostgreSQL 14 to 18 upgrade take?
The schedule depends on the number of databases, their size, how many applications and extensions connect to them, and whether you choose pg_upgrade or logical replication. PostgreSQL 14 reaches end of life on November 12, 2026, so plan backward from that date and leave room for at least one full rehearsal. According to the PostgreSQL upgrading documentation, logical replication can limit downtime to several seconds, but building and validating the replica takes its own time. Ask any partner for a schedule that lists dependencies on your change board, application owners and test data.
What does our team need to provide for the upgrade?
Plan for access, time and people. Engineers need administrative access to the database hosts, the ability to take and restore backups, and a test environment close enough to production to rehearse the cutover. Application owners must confirm which drivers, connection settings and SQL features they use, and they must agree on a change window. You also need representative test data, with personal or regulated data handled under your own controls. Name a decision-maker who can accept or defer the cutover. Ask the partner to list these inputs in the written scope so gaps appear before work starts.
Can our internal team upgrade PostgreSQL 14 to 18 alone?
Yes, an internal team can run the upgrade if it has engineers who have completed a major version upgrade, time for the pg_upgrade --check step and repeated rehearsals, and clear ownership of extensions, authentication and rollback. The risks usually sit in the details: extension compatibility, password authentication, connection pooling settings and the rollback plan. PostgreSQL 18 deprecated MD5 password authentication in favor of SCRAM, so client drivers and pooler configurations need review. Many teams keep execution in-house and bring in an outside partner for the assessment, a rehearsal review or an independent check before cutover.
What does an outside partner provide for a PostgreSQL upgrade?
DeployOpen plans, implements, documents and supports self-hosted open-source platforms in infrastructure you control, including your cloud accounts, data centers or air-gapped networks. For a PostgreSQL upgrade, the written scope can cover the compatibility assessment, running and reviewing pg_upgrade --check, extension and authentication changes, rehearsal runs, a cutover plan with a rollback path, and runbooks handed over at the end. Most engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts. Ongoing support and upgrades are available as retainers. DeployOpen prepares systems and evidence for compliance assessments but does not issue audit reports or certifications.
Can we skip PostgreSQL 15, 16 and 17 and upgrade straight to 18?
Whether a skip path is supported is a question for the PostgreSQL upgrading documentation and the release notes for each version you would pass over. Confirm the exact source and target versions in those documents before planning, because the supported path and the behavior of pg_upgrade depend on them. Check the release notes for removed or changed features, altered defaults, and anything that affects your extensions and applications. Treat the path as unconfirmed until the documentation and your own rehearsal results support it. Ask any partner to record the confirmed path, with the document references, in the written scope.
Does moving to PostgreSQL 18 change how we handle password authentication?
Yes, it can. PostgreSQL 18 deprecated MD5 password authentication in favor of SCRAM, so any role still using MD5 hashes needs review before cutover. Check the password_encryption setting and the pg_hba.conf entries, and confirm that every client driver, connection pooler and application supports SCRAM. Plan how you will reset or rotate passwords for affected roles and who approves those changes. Test every login path in the rehearsal environment. The PostgreSQL client authentication documentation lists the available methods, which helps you choose the target configuration.
How DeployOpen scopes, delivers and supports a PostgreSQL 14 to 18 upgrade
DeployOpen plans the move from PostgreSQL 14 to PostgreSQL 18 as a fixed-scope engagement, with the scope agreed in writing before work starts. The work runs in your own infrastructure, from the pg_upgrade --check run and extension review through a rehearsed cutover and handover. Because PostgreSQL 14 reaches end of life on November 12, 2026, the scope can also cover a support retainer after the cutover.
How we scope
- Inventory every PostgreSQL 14 cluster, replica, extension and client application that connects to it.
- Confirm the target platform, connection poolers, backup tooling and high availability design in the written scope.
- Agree the downtime budget, then choose pg_upgrade or logical replication, with deliverables fixed in writing before work starts.
How we build
- Run pg_upgrade --check against a copy of production data and resolve every reported incompatibility before cutover.
- Review each extension for PostgreSQL 18 compatibility and build or replace packages where the vendor build is missing.
- Move password authentication from MD5 to SCRAM, testing every client driver that connects to the database.
How we hand over
- Rehearse the full cutover on a staging copy, timing each step and recording the rollback path for the team.
- Document the runbook, configuration changes, authentication settings and post-upgrade checks as written deliverables.
- Hand over monitoring and backup checks, including a verified restore after the upgrade, before the engagement closes.
How we support
- Keep PostgreSQL 14 available for rollback until the rollback window in your runbook has closed.
- Plan routine minor-release updates in your maintenance windows, since they replace executables and restart without changing storage format.
- Ongoing support is available as a retainer, with covered items confirmed in the written scope.

