Install plone.pgcatalog¶
Install the package¶
pip install plone.pgcatalog
# or
uv pip install plone.pgcatalog
Requirements: Python 3.12+, PostgreSQL 14+ (tested with 17), zodb-pgjsonb >= 1.1.
Configure Zope¶
Your zope.conf must use zodb-pgjsonb as the ZODB storage.
plone.pgcatalog discovers its PostgreSQL connection from the storage layer.
%import zodb_pgjsonb
<zodb_db main>
<pgjsonb>
dsn dbname=zodb host=localhost port=5432 user=zodb password=zodb
</pgjsonb>
</zodb_db>
plone.pgcatalog is autodiscovered via z3c.autoinclude – no %import needed for the catalog itself.
Apply the GenericSetup profile¶
Install via Plone’s Add-on installer (Site Setup > Add-ons), or programmatically:
setup_tool = portal.portal_setup
setup_tool.runAllImportStepsFromProfile("profile-plone.pgcatalog:default")
The profile replaces portal_catalog with PlonePGCatalogTool.
The install step automatically:
Snapshots existing index definitions and metadata columns (preserving addon indexes)
Replaces
portal_catalogwith a freshPlonePGCatalogToolRe-applies essential Plone catalog indexes (UID, portal_type, etc.)
Restores addon-provided indexes from the snapshot
Removes orphaned ZCTextIndex lexicons (no longer needed with PG-backed search)
Applies DDL schema to PostgreSQL (columns, functions, indexes)
Rebuilds the catalog by running
clearFindAndRebuild()to index all existing content into PostgreSQL
Verify installation¶
Visit ZMI > portal_catalog – the class should show
PlonePGCatalogTooland the meta typePG Catalog Tool.Run a test query:
portal.portal_catalog(portal_type="Document")