When does a PostgreSQL upgrade become urgent?
An upgrade becomes urgent when the major version you run is out of support or close to it, or when a new requirement cannot be met on your current version. The short answer on in-house versus partner work is that the deciding factors are fleet size, the team's recent experience with major upgrades, and how much downtime the business will accept. A single small cluster with a team that has done a major upgrade before can usually be handled in-house. A larger fleet with a tight cutover window often justifies a partner.
PostgreSQL supports each major version for five years after its initial release, and the versioning policy lists the end dates for the current versions. Version 14 is supported until November 12, 2026, version 15 until November 11, 2027, version 16 until November 9, 2028, version 17 until November 8, 2029, and version 18 until November 14, 2030. Versions 13 and earlier are no longer supported. Start by listing every cluster in your estate with its exact major version, then map each one to these dates. Any cluster that ends support within the planning horizon of your change calendar should already have a target version and a scheduled window.
Three kinds of events should move an upgrade up the list. The first is end of life, when the version stops receiving fixes at all. The second is security fixes: minor releases arrive at least once every three months, and a cluster that cannot take them because it has no supported minor line carries known risk that cannot be patched in place. The third is a new application requirement, such as a vendor who needs a newer major version or an authentication change. PostgreSQL 18 deprecated MD5 password authentication in favor of SCRAM, so any application or driver that still depends on MD5 needs a test before you move. Confirm these requirements with each application owner in writing.
Bring in a partner when the work outgrows what your team has already done. Common signals include several clusters on versions that end support within the same year, no one on staff who has run a logical replication cutover or a pg_upgrade rehearsal, a downtime allowance measured in seconds or minutes, or a need for evidence that the upgrade was tested and reversible. Ask any partner for a fixed-scope written quote that names the clusters, the target versions, the upgrade method, the rehearsal count, the rollback plan and the handover. Also confirm that every extension and driver you use supports the target version before the quote is signed.
What a PostgreSQL upgrade and support engagement includes
Each card is one stage of a PostgreSQL upgrade or ongoing support, and each ends in a document the client keeps. The stages run in order, from assessing the current cluster through cutover, validation and the minor release cadence that follows. Supported major versions have fixed end dates, so the work starts with the version in use and the time left on it.
Upgrade assessment and inventory
Before a method is chosen, we inventory the cluster: installed extensions and their versions, replication topology, publications and subscriptions, and the client connections and authentication settings that cross the upgrade boundary. Each item is checked against the target major version, so incompatibilities surface during planning, when they are cheapest to fix. Deliverable: the upgrade assessment report and the extension, replication and connection inventory.
Upgrade method and rehearsal
The method depends on downtime tolerance, data volume and whether logical replication can carry the workload. pg_upgrade, dump and restore, and logical replication each trade downtime against effort and rollback options. We run the chosen method against a copy of production, record timings and errors, and repeat until the steps are predictable. Deliverable: the method decision record and the rehearsal log with measured timings.
Cutover runbook and rollback
The cutover runbook lists every step in order, with an owner, a go or no-go check and the expected output for each command. It covers stopping writes, final synchronization or dump, starting the new major version, repointing connection poolers and application configuration, and the point after which rollback becomes difficult. Rollback steps are written and rehearsed, including how writes made on the new version are handled. Deliverable: the signed-off cutover runbook and rollback plan.
Post-upgrade validation
Validation confirms the upgraded cluster is correct before users return. We compare row counts and checksums on critical tables, confirm extensions load, review logs for errors and run application test suites against the new version. Planner statistics need explicit checks: PostgreSQL 18 pg_upgrade retains them, but the team should confirm on the target version whether an ANALYZE pass is still needed. Deliverable: the post-upgrade validation report and sign-off record.
Quarterly minor release routine
PostgreSQL ships minor releases at least once every three months. Minor releases do not change the internal storage format, so applying one means replacing executables and restarting. We build a patch calendar for each cluster, test each release in staging, schedule the restart in a maintenance window and record the change. Deliverable: the patch calendar, a change record for each release and an updated configuration baseline.
Ongoing DBA support
Ongoing support covers the operational work between upgrades: monitoring review, backup and restore verification, configuration changes, capacity reviews and incident response. Coverage hours, response expectations and escalation paths are set in the written agreement, so confirm them against your operating hours and compliance obligations. Support is delivered as a retainer. Deliverable: monthly service reports, a change log and the current runbook set.
What makes a PostgreSQL upgrade take longer or cost more
The table lists the factors that most change the effort of a major PostgreSQL upgrade and shows one practical way to keep each one under control. Read it before you request a quote, because each driver changes the scope you should ask a partner to price. Most of the cost comes from rehearsal and verification rather than from the upgrade command itself.
| Driver | Why it changes effort or cost | How to keep it down |
|---|---|---|
| Database size and number of clusters | Larger data sets make dump and restore slower, while pg_upgrade and logical replication depend on how much data must be copied, verified and rehearsed. Each additional cluster repeats the planning, testing and cutover steps. | Group similar clusters onto a shared upgrade runbook, and measure restore and copy times on a recent copy of production before committing to a window. |
| Number of extensions and custom code | Extensions must support the target major version before cutover, and custom functions, triggers or procedures may need changes or retesting. Every extension adds a compatibility check and a potential blocker. | Inventory extensions and in-database code early, remove unused items, and prefer extensions with clear release support for the target version. |
| Client applications and connection pooling in front | Each application that connects directly must be tested for behavior changes, driver compatibility and reconnect handling during cutover. A pooler in front adds its own configuration and reconnection checks. | List every client, its driver version and its connection method, then test reconnect behavior with the pooler in place during the rehearsal. |
| Replication topology (standbys, synchronous or asynchronous) | Standbys must be rebuilt or upgraded in a defined order, and synchronous replication makes commit timing part of the cutover plan. Logical replication adds publication and subscription setup and monitoring. | Document the standby order and the switchover steps, and rehearse them, so the team knows which node changes first and how to roll back. |
| Downtime window | A short window forces logical replication or a prepared cutover, which adds build and monitoring effort. A longer window allows simpler methods but may be harder to schedule with the business. | Agree the acceptable window with application owners before choosing the method, and confirm it against the rehearsal timings. |
| Number of environments to rehearse in | Each non-production environment that must match production adds rehearsal runs, data refreshes and sign-off effort. Differences between environments often cause surprises at cutover. | Keep one rehearsal environment close to production in size and configuration, and script the upgrade so the same steps run in every environment. |
| Compliance evidence needs | Assessors may expect records of the change plan, test results, approvals, backup verification and post-upgrade checks. Collecting this evidence after the fact takes more effort than capturing it during the work. | Define the evidence list at scoping, such as change records, test outputs and restore proofs, and capture them as each step completes. DeployOpen prepares evidence, while independent auditors assess it. |
| Starting version | Upgrades from older major versions may cross more changes in behavior, deprecated features and authentication defaults, so more code and client changes need review. Versions past end of life also carry security exposure while the work is planned. | Check the supported version dates for your starting version, and review release notes for every major version you skip before scoping the work. |
pg_upgrade, logical replication or dump and restore: which path fits your downtime window
The choice between the three documented routes comes down to how long the database can stay offline and how much change you can tolerate during the move. Dump and restore is the simplest path. pg_dumpall writes every object and every row out to a logical dump, and the new cluster rebuilds all of it, so downtime grows with data volume and object count. pg_upgrade converts the system catalogs and reuses the existing data files, which is usually much faster for large clusters, but the source cluster must be stopped while it runs. Logical replication is the third option. Before you choose a route, read the upgrading documentation for your exact source and target major versions, because the steps and limits differ between them.
Logical replication is the route to evaluate when the outage window must be short. It works between different major versions, so the new cluster can stay in sync with the old one until you are ready to cut over. The PostgreSQL documentation describes the resulting downtime as only several seconds. That figure depends on how quickly your team can stop writes, let the subscriber catch up, sequence the values and repoint applications, so the cutover must be rehearsed on a copy of production before it is trusted. Treat the several seconds as a documented possibility to test, not as a promise about your environment.
Logical replication has prerequisites that need checking before you choose it. Every table you replicate needs a replication identity, which is normally a primary key or an explicit REPLICA IDENTITY setting, because updates and deletes cannot be applied on the subscriber without one. Sequence values are not carried across by replication and must be synchronized at cutover. Schema changes made during the sync are not replicated automatically, so any DDL applied to the publisher must be applied to the subscriber in the same order. Finally, review your schema for object types that logical replication does not carry, such as large objects, and plan a separate migration step for each one. Run this inventory against the target version and record the results in your plan.
PostgreSQL 18 changes the pg_upgrade picture. The release announcement states that pg_upgrade retains planner statistics across major upgrades, so the new cluster does not start with missing statistics that can produce poor query plans immediately after cutover. The same release adds parallel jobs and a --swap option. Confirm which pg_upgrade flags your target version supports by reading the reference page for that exact release, and do not copy flags from older runbooks. Test the chosen flags on a copy of production. Parallel jobs shorten the window only if your storage and CPU can sustain the extra load without slowing the upgrade itself.
How a PostgreSQL major upgrade moves from assessment to handover
The sequence turns an aging PostgreSQL cluster into a tested target version, with a cutover you can reverse, measured performance and runbooks your team can operate. Each phase ends with a written output that the next phase depends on.
Inventory the cluster and review compatibility
DeployOpen reviews the current version, extensions, replication topology, backup chain, connection patterns and application database drivers, then checks deprecated features and behavior changes between the source and target major versions against the PostgreSQL release notes. Effort depends mainly on how many databases, extensions and custom objects exist and how much application code depends on them. The step closes with a compatibility report that lists each blocking issue, its owner and the proposed fix, which the client signs off before any target is chosen.
Select target version and upgrade method
The target is chosen from the supported major versions and their end-of-life dates, weighed against application certification needs and the time left on the source version. The method is then selected between pg_upgrade, dump and restore, and logical replication. Pg_upgrade suits in-place moves with short downtime windows, while logical replication suits low-downtime cutovers but needs primary key coverage and a replication slot plan. The output is a written decision record covering target version, method, downtime expectations confirmed with the client, and the rollback path.
Rehearse the upgrade on a production copy
The team restores a recent copy of production onto infrastructure matching the target environment, then runs the full procedure end to end, timing each stage and recording every deviation from the plan. Rehearsal typically needs more than one pass when the first run exposes extension or configuration gaps, and the duration of each pass depends on database size and restore speed. The step closes when a rehearsal completes with the runbook corrected and the application test suite passing against the upgraded copy.
Cut over with defined rollback criteria
Before the production window opens, the client and DeployOpen agree on go and no-go criteria, including the conditions that trigger rollback and the point after which rollback is no longer practical. During cutover the team stops writes, runs the chosen method, updates connection configuration, and restarts dependent services in a fixed order. The output is a timestamped cutover log, a confirmed application connection to the new version, and a record of whether the rollback option was used or closed.
Validate behavior and compare performance
After cutover, the team checks row counts and checksums on critical tables, runs application smoke tests, and reviews error logs. Performance is compared against baseline metrics captured on the source version, covering query latency, lock waits, replication lag and resource use. Planner statistics handling differs by method and version, so the team confirms whether statistics were retained or need rebuilding before judging results. The step closes with a validation report listing each check, its result and any open tuning items.
Hand over runbooks and the support schedule
DeployOpen delivers runbooks for routine operations, backup and restore verification, minor release application, failover procedures and the upgrade itself, and walks the client's operators through them. The support schedule records who responds to which events, how minor releases will be scheduled given the quarterly cadence, and when the next major version review falls. Ongoing support can be retained or handled in-house, and the client should ask for the handover pack in writing. The step is complete when the client's operators run a supervised routine task from the runbook without assistance.
Which parts of a PostgreSQL upgrade your team keeps and which a partner takes
This table compares eight upgrade and support tasks by who usually owns them, the skills each one needs, and when an outside partner adds the most value. Read it as a split, not a hand-off: most rows stay with your team for approval and business context, and the partner takes the work that is repetitive, time-pressured or easy to get wrong under cutover pressure.
| Task | Usually owned by | Skills needed and when a partner adds most value |
|---|---|---|
| Inventory and compatibility review | Your application and DBA leads | Knowledge of extensions, deprecated features, client drivers and third-party tools. A partner adds value when the inventory spans many databases with undocumented dependencies. |
| Method selection | Shared, with your DBA lead making the final call | Choosing between pg_upgrade, logical replication and dump and restore based on downtime tolerance and rollback needs. A partner adds value when the downtime window is short and the trade-offs need a documented comparison. |
| Rehearsal on a production-like copy | Partner-led or your DBA team | Replication internals, data volume handling and runbook writing. A partner adds value because rehearsals repeat until timings and failure steps are stable. |
| Cutover execution | Your team owns the decision, partner often runs the steps | Change management, sequencing of replication lag checks, connection draining and rollback criteria. A partner adds value when cutover must happen inside a narrow, approved window. |
| Application regression testing | Your application team | Application knowledge, test data design and query behavior review after planner changes. Your team is usually the only party who can judge correct results; a partner can supply test tooling and performance comparisons. |
| Minor release patching | Your DBA team, partner for scheduled cycles | Routine executable replacement and restart planning, which PostgreSQL minor releases do not require a storage format change for. A partner adds value when patching runs on a fixed cadence across many clusters. |
| On-call DBA coverage | Your operations team, or a retained partner | Incident response, replication monitoring and failover handling. Ask any partner which hours are covered and how escalation to your staff works before you agree to a retainer. |
| Backup restore testing | Shared, with the restore test run by a partner or your team | Point-in-time recovery, WAL archive checks and documented recovery timing. A partner adds value when restores are tested on a schedule and results are recorded for audit and continuity reviews. |
What usually goes wrong in PostgreSQL upgrades and how to prevent it
Most PostgreSQL upgrade problems come from work that was skipped before cutover, not from the upgrade tools themselves. Each card names one failure mode and a check you can confirm before the change window opens.
Extensions missing on the target version
An extension that loads on the current major version may have no build for the new one, or may lag behind it. Extensions that are compiled against the server must be installed on the new binaries before pg_upgrade runs. Ask for a written list of every extension in use, the target version each one supports, and a test that loads each extension on a staging copy of the new version.
Planner regressions after upgrade
A new major version can choose different plans for queries that performed well before, which shows up as slow reports or timeouts after cutover. Record execution plans and timings for the most important queries on the source cluster, then rerun them on the target. Per the PostgreSQL 18 release notes, pg_upgrade there retains planner statistics, so confirm that behavior on your version and plan an ANALYZE run if statistics are not carried over.
Sequences not carried over under logical replication
Logical replication copies table rows and changes but does not replicate sequence values. If the new primary keeps the old sequence positions, the next insert can fail on a duplicate key or, worse, reuse values that the application expects to be unique. Before cutover, set each sequence on the target to the source value plus a safety margin, and add a check that compares sequence positions on both sides.
Unnoticed application and driver issues
Drivers, ORMs and connection poolers can behave differently against a new server version or a new authentication setup. Problems often appear only in code paths that the smoke tests never reach. Run the full application test suite against the target, record the driver versions in use, and confirm that every client authenticates with SCRAM, since MD5 password authentication is deprecated. Check that PgBouncer pool modes still match what the application expects.
No tested recovery path before cutover
A cutover plan needs two tested exits: a restore from a backup taken just before the change, and a documented way to return traffic to the source cluster. Backups that have never been restored are unproven, and a rollback that depends on data written only to the new cluster may not be possible. Ask for a timed restore test on separate hardware and a written decision point after which rollback is no longer available.
Minor releases postponed until an emergency
PostgreSQL ships minor releases at least once every three months, and minor updates swap executables and need only a restart. Teams that defer them for months end up applying security fixes under pressure, often at unplanned hours. Set a fixed quarterly review, keep a tested staging run, and confirm the support end dates for your major version, since version 14 is supported only until November 12, 2026.
What PostgreSQL support costs after the upgrade
The recurring cost of running PostgreSQL after an upgrade is mostly people and infrastructure. PostgreSQL is released under the PostgreSQL License, a permissive open source license, so the community edition has no license fee to renew each year. Support is a separate line item. You can buy it from a partner, staff it internally, or combine both. Before comparing options, separate one-time costs, such as the upgrade project and the test environments built for it, from costs that recur every year, because the recurring share determines how a support model affects your budget over the next several years.
The main recurring items are hosting, release work and DBA time. Standby servers and a non-production environment that is close enough to production to rehearse changes run continuously, whether they sit in your cloud accounts or consume capacity in your data center. PostgreSQL publishes minor releases at least once every three months. Each one needs a test run, a change record, a restart window and rollback notes, so the staff time for that cadence repeats every quarter. In a quote, ask how many release windows are included, who performs the rehearsal, and who signs off before production changes.
Next, decide how DBA coverage will be bought and kept. A retainer reserves a set amount of expert time and defined response expectations each month. It suits teams whose database changes arrive steadily and who need a known contact for incidents. Ad hoc support is billed as work arrives. It can work for a stable estate, but response depends on availability when the problem occurs. Internal skills carry a cost either way. Someone must read release notes, check extension compatibility, review authentication changes such as those introduced in PostgreSQL 18, and run backup restore tests. Count the hours current staff already spend and identify the gaps, especially in failover tooling and recovery testing.
Several factors move the recurring load up or down. The number of clusters matters most, because each cluster adds standby servers, backups, monitoring, restore tests and release work. Change frequency matters next: schema changes, new extensions and application releases all require regression checks. Compliance evidence is the third driver. If an assessor expects access reviews, patch records or restore results on a schedule, someone must collect and retain them. DeployOpen prepares that evidence, but independent auditors decide whether it meets the standard. Also note the end-of-life dates. PostgreSQL 14 is supported until November 12, 2026, so the next major upgrade will change the recurring workload when it happens.
DeployOpen does not publish prices. A quote follows from the written scope, so the scope should state the clusters and environments covered, the release windows per year, the support model and response expectations, the evidence to be produced and who holds on-call responsibility. Ask for the quote with recurring and one-time items shown separately. That layout lets you compare a partner retainer with the internal hours and hosting you would otherwise carry, using the same assumptions for both.
How PostgreSQL upgrades differ by starting point and environment
If your cluster runs PostgreSQL 13 or earlier, it is out of community support, so the upgrade becomes a security task as well as a compatibility task. The plan begins with the gap between your current version and a supported target, which may involve several major releases and more changes to check.
What changes in the plan:
- Target selection: Version 18 was first released September 25, 2025, and is supported until November 14, 2030. Version 14 is supported until November 12, 2026, so a cluster on 14 has a near-term deadline.
- Upgrade path: Confirm whether the target's pg_upgrade accepts your source version directly or whether a staged path is needed.
- Inventory: List extensions, drivers and authentication methods. PostgreSQL 18 deprecates MD5 password authentication in favor of SCRAM, so older password hashes need a plan.
- Method: pg_upgrade is the usual choice for in-place major upgrades, while logical replication can shorten cutover but needs more setup and monitoring.
Main risk: The team tests against a modern target but misses behavior changes that accumulated across the skipped versions.
Before committing, confirm which target version your applications, extensions and drivers support, and whether a supported upgrade path exists before your current version's support ends.
Moving from a managed cloud database to self-hosted PostgreSQL before upgrading turns one project into two. The provider's managed upgrade mechanism no longer applies, so the team takes on the version change, backups, failover and access controls that the provider handled.
What changes in the plan:
- Settings export: Managed services often set parameters through provider-specific configuration. Record every non-default setting and confirm its equivalent in your own configuration files.
- Extensions: Confirm which extensions the managed service provides, which versions it runs and whether each is available in your self-hosted build.
- Roles and privileges: Managed platforms commonly restrict superuser access. Map the provider's administrative roles to ownership and privileges you can actually manage on your own servers.
- Recovery: Rebuild base backups, WAL archiving and restore tests on your own infrastructure before the cutover, since the provider's backup service will not follow you.
- Cutover method: Ask whether the managed source allows logical replication to your target and which replication settings you need enabled.
Main risk: The migration succeeds on data, but a provider-specific extension, setting or privilege is missing, and the failure appears only after users connect.
Before starting, ask the provider for a full list of non-default settings, extensions and version details, and compare them with the target you plan to run.
On Kubernetes or in containers, the database upgrade depends on how the data directory, binaries and operator are packaged. A pod restart can look routine, but a major upgrade changes the on-disk layout and needs both the old and new executables available during the process.
What changes in the plan:
- Image strategy: Decide whether each major version gets its own image and confirm that the pg_upgrade step can reach both the old and new binaries.
- Operator compatibility: Check which PostgreSQL versions your operator supports and how it handles major version changes, since operator upgrades and database upgrades may need separate steps.
- Storage: Confirm that the data directory sits on persistent volumes with the correct storage class, and that a rollback path keeps the old volume intact.
- Disruption controls: Review pod disruption budgets, readiness checks and replica placement so that a rolling restart does not take down the primary and its standbys together.
- Minor releases: Quarterly minor releases can be applied through image tags, so define who approves each tag and how it is tested first.
Main risk: A volume, image tag or operator setting mismatches during the upgrade, leaving the data directory unreadable or the cluster in a partial state.
Before the upgrade, confirm with your operator vendor which major versions it supports, how it performs the major upgrade and whether a rollback restores the previous volume state.
In an air-gapped network, the team cannot download packages, extensions or documentation during the work, so every dependency must be staged in advance. The upgrade plan starts with an inventory of what the cluster needs and a transfer process that the security team has approved.
What changes in the plan:
- Package staging: Mirror PostgreSQL server packages, client tools, extensions, PgBouncer and operating system dependencies for both the source and target versions.
- Verification: Record checksums and signatures for each transferred artifact and keep them with the release record so the transfer can be audited.
- Documentation: Store offline copies of the release notes and upgrade documentation for the exact versions in scope, because online references may change.
- Patch intake: Quarterly minor releases need a defined intake process, including who reviews security fixes and how long each transfer takes through your approval path.
- Test environment: Rehearse the upgrade inside a staging network that mirrors the production restrictions, including the same package sources.
Main risk: A missing dependency or unstaged extension is discovered during the maintenance window, and the team cannot fetch it quickly.
Before scheduling, ask your security team how long artifacts take to clear transfer, and confirm that every package, extension and document needed for the target version is already inside the network.
What your team needs to provide before an upgrade starts
Your team's inputs decide whether a PostgreSQL upgrade stays on schedule. Before work starts, we need read access to every cluster in scope, including the postgresql.conf and pg_hba.conf files, the current major and minor version of each server, and the replication topology if standbys exist. We also need an inventory of installed extensions with their versions, and a list of client applications, drivers, ORMs and connection poolers that connect to each database. Extensions and drivers are the most common source of surprises during a major upgrade, because a server can start on the new version while a contrib module or an older client library does not.
A non-production environment matters more than most teams expect. It should run the same operating system family and PostgreSQL major version as production, and it should hold a copy of production data that is recent enough to reflect real table sizes, index bloat and workload shape. A schema-only copy will not show how long pg_upgrade takes to relink objects, or how long a logical replication initial sync runs. Confirm with your data owners whether a masked copy is acceptable under your data handling rules, and confirm who can approve its refresh date.
Name three people before scheduling. The maintenance window owner sets the start and end times, notifies dependent teams and holds the change record. The rollback decision-maker is the person who can say "go back to the old cluster" during the window, and that person must be reachable for the whole window, not only at the start. The named application owner runs the regression checks against their own workflows after the upgrade and signs off that the application behaves correctly. If one person holds two of these roles, write that down, because it changes who has to be available.
Ask for backup and restore evidence before the upgrade, not after. That means the most recent base backup and WAL archive coverage for each cluster, plus the result of a restore test into a separate host. If your recovery objectives depend on point-in-time recovery, confirm that the archive covers the upgrade window. The rollback plan for pg_upgrade and for logical replication both depend on the old cluster remaining intact until the new one is accepted, so confirm the disk space and retention settings that will keep it available.
Settle four decisions early, because each one changes the plan and the effort. The first is the target version. Compare the end-of-life dates in the PostgreSQL versioning policy against your own support calendar, and remember that PostgreSQL 18 retains planner statistics across major upgrades, which affects post-upgrade performance checks. The second is the method: pg_upgrade is simpler but needs a restart window, while logical replication can reduce downtime to a few seconds at the cost of more setup and per-table validation. The third is downtime tolerance, stated as a number of minutes per cluster and agreed by the business owner. The fourth is the support hours for the window, including who is on call after it closes. Each sign-off should be recorded in writing by the people named above.
PostgreSQL upgrade and support questions buyers ask
How much does a PostgreSQL major upgrade cost?
Cost depends on how much work sits around the database engine, not on the upgrade command itself. Most of the effort goes to assessment, application and extension compatibility testing, rehearsals, the cutover window, backup and rollback planning, and post-upgrade verification. The main cost drivers are the number of clusters, database size, replicas, the extensions and client libraries in use, how many applications connect, and how strict the downtime window is. The one-time project cost is separate from any recurring support retainer that covers later minor releases or DBA hours. When you request a quote, ask for a phase-by-phase breakdown, the assumptions behind it, what is excluded, how many rehearsals are included, and what post-upgrade support period is covered.
How long does a PostgreSQL major version upgrade take?
Duration varies with the method, the size and count of your clusters, and how much testing your applications need. A pg_upgrade run depends on whether files are copied, linked or cloned, and its time grows with catalog size and the amount of data it must process. Logical replication moves the data while the source stays online, so the calendar time is driven by initial sync speed, change volume and validation effort. PostgreSQL 18 retains planner statistics across major upgrades and adds parallel jobs, which can shorten the post-upgrade steps when your version and tooling match. Ask for a schedule built from a rehearsal on a copy of your production data, since rehearsal timings are the most reliable input for planning.
Can our own DBA team upgrade PostgreSQL without outside help?
Yes, many in-house teams perform major upgrades themselves, and the PostgreSQL upgrading documentation describes the supported paths: dump and restore, pg_upgrade, and logical replication. Whether your team should do it depends on capacity and risk. Check whether engineers have done a major upgrade on a production-sized cluster, whether they can run a full rehearsal, whether they have tested the extensions and drivers your applications use, and whether someone is available for the cutover night and the days after. Outside help is often used for the planning and rehearsal phases, a second pair of hands at cutover, or a review of the rollback plan. Decide this by listing the tasks and matching each one to a named person with time available.
Do PostgreSQL minor releases need outside help to apply?
Usually not. Minor releases do not change the internal storage format, so applying one generally means replacing the executables and restarting the server, a routine task for most database teams. The work that needs planning is operational: tracking the quarterly minor release cadence, testing the update in a non-production environment, scheduling a restart, confirming replicas follow the primary correctly, and checking that backups still restore. Teams without spare capacity often buy a recurring support arrangement to handle this cycle. Ask whether that arrangement includes testing, change records and evidence for your change management process, and whether it covers emergency updates for security fixes between scheduled releases.
Does logical replication give a PostgreSQL upgrade with zero downtime?
No. Logical replication works between different major versions, and the PostgreSQL documentation describes it as allowing a major upgrade with only several seconds of downtime. Several seconds is a different outcome from zero, and the actual interruption depends on how the switch to the new cluster is designed, how connections are redirected, and whether sequences, large objects, schema changes and unsupported objects are handled before cutover. Applications with long-running transactions or heavy write rates need extra planning. Ask for a written cutover runbook, the rehearsed interruption measured on a copy of your workload, and a list of objects that logical replication does not carry, so your application owners can accept the stated downtime with evidence.
What do we need to provide before a PostgreSQL upgrade engagement starts?
Start with access and information. You will need a current inventory of clusters, versions, extensions, replicas, backup jobs and connecting applications, plus read access to configuration and logs. The engagement also needs a test environment that is close enough to production to rehearse the upgrade, a copy of recent production data or a representative subset approved for use, and named contacts for each application owner. Decide who can approve the downtime window, who signs off on test results, and who holds the rollback decision. Confirm change-control rules for your environment, any maintenance windows, and whether the work will run in your cloud account, data center or air-gapped network. Missing items usually show up as delays in the rehearsal phase, so ask for a written list before scoping.
Which PostgreSQL versions are still supported, and when do they end?
PostgreSQL supports each major version for five years after its initial release. The supported versions and end dates listed in the PostgreSQL versioning policy are: version 18 through November 14, 2030; version 17 through November 8, 2029; version 16 through November 9, 2028; version 15 through November 11, 2027; and version 14 through November 12, 2026. Versions 13 and earlier are no longer supported. Plan your upgrade path before the end date of your current major version, because a version past end of life receives no further minor releases and security fixes from the community. Confirm the dates against the official versioning page before you set a project timeline, since your own risk and compliance requirements may set an earlier internal deadline.
What does ongoing PostgreSQL DBA support cover, and what does it not?
Ongoing support typically covers the recurring operational work after go-live: applying quarterly minor releases, reviewing logs and performance trends, checking backups and replication health, handling change requests, and responding to incidents within the agreed hours. It can also include planning the next major upgrade before the end of life date. Support usually does not include application code changes, redesign of the data model, or work outside the agreed systems unless it is scoped separately. Ask for the service hours, response expectations, the list of systems covered, how changes are approved, what reports you receive, and how the arrangement changes when a new major version is released. A written scope is the basis for a fair comparison with your own team's time.
How DeployOpen scopes, delivers and hands over PostgreSQL upgrades
DeployOpen plans and carries out PostgreSQL major upgrades and minor release updates inside your own infrastructure, as fixed-scope work agreed in writing before any change begins. Each engagement starts from your installed versions and their end-of-life dates, then documents the cutover and rollback steps for your team. Ongoing support is available as a retainer for minor releases and continuing DBA work.
How we scope
- The written scope names each source and target PostgreSQL version, with its support end date.
- It states whether the upgrade uses pg_upgrade, logical replication or a dump and restore, and why.
- Scope covers extensions, client drivers, PgBouncer, backups and monitoring that the upgrade touches.
How we build
- Staging rehearsals run on a copy of production data, with the same extensions and configuration.
- Application query behavior and connection handling are tested against the target major version before cutover.
- Rollback steps are rehearsed, including how to restore from a verified backup if validation fails.
How we hand over
- A runbook records the exact commands, configuration changes and validation checks used in the upgrade.
- Your team receives the rollback procedure and a post-upgrade checklist, including any ANALYZE steps still required.
- Knowledge transfer sessions cover how minor releases are applied and how to confirm the running version.
How we support
- Retainers can cover review and application of PostgreSQL minor releases, which arrive at least every three months.
- Support can track end-of-life dates for each running major version and plan the next upgrade in advance.
- Changes to ongoing scope are agreed in writing before work starts, as with every engagement.

