Add PostgreSQL 18 options to the Backup and Restore dialogs#10060
Conversation
Adds the new pg_dump/pg_dumpall/pg_restore options introduced in PostgreSQL 18, gated to servers >= 18: - Only statistics (--statistics-only) in Type of objects, mutually exclusive with the other Only * switches. - Row security policies (--no-policies), Data (--no-data) and Schema (--no-schema) in Do not save (both dialogs); Statistics (--no-statistics) in the Restore dialog. - Dump statistics (--statistics) and Sequence data (--sequence-data) in Backup Miscellaneous. The pg_dumpall -F/--format option and the pg_restore --exclude-database / -g/--globals-only options are not included: the non-text pg_dumpall feature was reverted before PostgreSQL 18.0 and those options do not exist in the shipped 18.x client utilities. Includes backend arg-builder wiring, unit-test scenarios and docs. Closes pgadmin-org#9064 Closes pgadmin-org#9065 Closes pgadmin-org#9066
WalkthroughThis PR adds support for PostgreSQL 18 backup and restore options to pgAdmin. New flags like ChangesPostgreSQL 18 Backup and Restore Options
🎯 2 (Simple) | ⏱️ ~10 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
web/pgadmin/tools/backup/__init__.py (1)
288-299:⚠️ Potential issue | 🟠 Major | ⚡ Quick winRoot cause: backend does not enforce one-of semantics for "Type of objects" flags.
Both arg builders can emit contradictory combinations (e.g.,
--data-onlywith--statistics-only) when payloads bypass UI constraints. Enforce exclusivity in backend command construction to keep API behavior valid and deterministic.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@web/pgadmin/tools/backup/__init__.py` around lines 288 - 299, The backend currently may emit conflicting "only_*" flags; before calling set_param compute mutually exclusive choices for only_data, only_schema, only_tablespaces, only_roles, only_statistics (e.g., read raw booleans from data and manager.version, then enforce one-of semantics by selecting a single true flag according to a deterministic precedence or by refusing others), then pass those resolved booleans to set_param; update the logic around the existing set_param calls for only_data, only_schema, only_tablespaces, only_roles, and only_statistics (and keep the existing manager.version check for statistics) so only one of these flags is ever set in the constructed command.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@web/pgadmin/tools/backup/static/js/backup.ui.js`:
- Around line 166-182: The new switch with id 'only_statistics' was added but
sections that represent dump/restore sections were not wired to it, allowing
conflicting flags; update any section control definitions (the objects that have
properties 'deps' and 'disabled'—e.g., the section controls grouping under 'Type
of objects' that currently list deps like
['pre_data','data','post_data','only_data','only_schema','only_tablespaces','only_roles'])
to include 'only_statistics' in their deps arrays and add the corresponding
check in their disabled predicate (i.e., include state.only_statistics in the OR
chain used in disabled functions); make the same symmetric change in the restore
schema file where the section controls are defined so both backup and restore
honor the only_statistics switch.
---
Outside diff comments:
In `@web/pgadmin/tools/backup/__init__.py`:
- Around line 288-299: The backend currently may emit conflicting "only_*"
flags; before calling set_param compute mutually exclusive choices for
only_data, only_schema, only_tablespaces, only_roles, only_statistics (e.g.,
read raw booleans from data and manager.version, then enforce one-of semantics
by selecting a single true flag according to a deterministic precedence or by
refusing others), then pass those resolved booleans to set_param; update the
logic around the existing set_param calls for only_data, only_schema,
only_tablespaces, only_roles, and only_statistics (and keep the existing
manager.version check for statistics) so only one of these flags is ever set in
the constructed command.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 15e3abc2-446e-4e9c-bb62-b930f0b8cf5f
📒 Files selected for processing (10)
docs/en_US/backup_dialog.rstdocs/en_US/backup_server_dialog.rstdocs/en_US/release_notes_9_16.rstdocs/en_US/restore_dialog.rstweb/pgadmin/tools/backup/__init__.pyweb/pgadmin/tools/backup/static/js/backup.ui.jsweb/pgadmin/tools/backup/tests/test_backup_create_job_unit_test.pyweb/pgadmin/tools/restore/__init__.pyweb/pgadmin/tools/restore/static/js/restore.ui.jsweb/pgadmin/tools/restore/tests/test_restore_create_job_unit_test.py
| id: 'only_statistics', | ||
| label: gettext('Only statistics'), | ||
| type: 'switch', | ||
| group: gettext('Type of objects'), | ||
| min_version: 180000, | ||
| deps: ['pre_data', 'data', 'post_data', 'only_data', 'only_schema', | ||
| 'only_tablespaces', 'only_roles'], | ||
| inlineGroup: 'type_of_objects', | ||
| disabled: function(state) { | ||
| return state.pre_data || | ||
| state.data || | ||
| state.post_data || | ||
| state.only_data || | ||
| state.only_schema || | ||
| state.only_tablespaces || | ||
| state.only_roles; | ||
| }, |
There was a problem hiding this comment.
Shared root cause: only_statistics was added without reciprocal section wiring.
Both backup and restore schemas add the new “Only statistics” switch, but section controls still don’t consistently depend on it. This leaves a path for conflicting --statistics-only + section flags. Fixing section deps and section disabled predicates in both files resolves both sites.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@web/pgadmin/tools/backup/static/js/backup.ui.js` around lines 166 - 182, The
new switch with id 'only_statistics' was added but sections that represent
dump/restore sections were not wired to it, allowing conflicting flags; update
any section control definitions (the objects that have properties 'deps' and
'disabled'—e.g., the section controls grouping under 'Type of objects' that
currently list deps like
['pre_data','data','post_data','only_data','only_schema','only_tablespaces','only_roles'])
to include 'only_statistics' in their deps arrays and add the corresponding
check in their disabled predicate (i.e., include state.only_statistics in the OR
chain used in disabled functions); make the same symmetric change in the restore
schema file where the section controls are defined so both backup and restore
honor the only_statistics switch.
There was a problem hiding this comment.
Pull request overview
Adds PostgreSQL 18 client-utility flags to pgAdmin’s Backup / Backup Server / Restore dialogs, updates backend argument builders to emit the new flags only for server versions >= 18, and extends documentation and unit tests accordingly.
Changes:
- Added new PG18 switches to Backup and Restore UI schemas (Only statistics; do-not-save/do-not-restore flags; misc flags).
- Updated backup/restore argument builders to emit the new flags when
manager.version >= 180000. - Updated docs and release notes; expanded unit tests for new options.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| web/pgadmin/tools/restore/tests/test_restore_create_job_unit_test.py | Adds a PG18 restore scenario asserting new flags are emitted. |
| web/pgadmin/tools/restore/static/js/restore.ui.js | Adds PG18 restore UI switches (Only statistics; no-policies/no-data/no-schema/no-statistics). |
| web/pgadmin/tools/restore/init.py | Adds PG18 restore arg-builder flags guarded by server version. |
| web/pgadmin/tools/backup/tests/test_backup_create_job_unit_test.py | Adds PG18 backup scenarios (emit flags for >=18, guard scenario for <18). |
| web/pgadmin/tools/backup/static/js/backup.ui.js | Adds PG18 backup UI switches (Only statistics; no-policies/no-data/no-schema; statistics/sequence-data). |
| web/pgadmin/tools/backup/init.py | Adds PG18 backup arg-builder flags guarded by server version. |
| docs/en_US/restore_dialog.rst | Documents new PG18 restore options. |
| docs/en_US/release_notes_9_16.rst | Adds release note entries for issues #9064/#9065/#9066. |
| docs/en_US/backup_server_dialog.rst | Documents new PG18 backup-server options. |
| docs/en_US/backup_dialog.rst | Documents new PG18 backup options. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| set_param('only_statistics', '--statistics-only', | ||
| manager.version >= 180000) |
| ('When restore object with option - Do not restore Row security ' | ||
| 'policies, Data, Schema, Statistics and Only statistics (>= v18)', | ||
| dict( | ||
| class_params=dict( | ||
| sid=1, |
Summary
Adds the new
pg_dump/pg_dumpall/pg_restoreoptions introduced inPostgreSQL 18 to the Backup, Backup Server and Restore dialogs.
All new options are gated to servers
>= 18(min_version: 180000in the UIand a
manager.version >= 180000check in the arg builders).Backup (
pg_dumpfor object backups,pg_dumpallfor server backups)--statistics-only) — Type of objects, mutuallyexclusive with the other Only … switches.
--no-policies), Data (--no-data),Schema (
--no-schema) — Do not save.--statistics) and Sequence data(
--sequence-data) — Miscellaneous.Restore (
pg_restore)--statistics-only) — Type of objects, mutuallyexclusive with the other Only … switches.
--no-policies), Data (--no-data),Schema (
--no-schema), Statistics (--no-statistics) — Do not save.Note on options that are not included
The
pg_dumpall -F/--formatoption (requested in #9065) and thepg_restore--exclude-database/-g/--globals-onlyoptions (requested in #9066) arenot added: the non-text
pg_dumpallfeature was reverted beforePostgreSQL 18.0, and those options do not exist in the shipped 18.x client
utilities (verified against
pg_dumpall --help/pg_restore --helpon18.4). The remaining, real PG 18 options from those issues are included.
Testing
flags are emitted at server version
>= 18and a guard scenario assertsthey are absent below 18.
pycodestyleandeslintclean; verified each flag (and combinations)against the bundled PostgreSQL 18.4 utilities.
Closes #9064
Closes #9065
Closes #9066
Summary by CodeRabbit
New Features
Documentation
Tests