Configure RelStorage with PostgreSQL¶
This guide walks you through setting up RelStorage with PostgreSQL as your ZODB storage backend. RelStorage stores pickles in a relational database and is the recommended backend for production Plone deployments that need horizontal scaling.
Prerequisites¶
New to this template? Start with Your first Zope instance.
A running PostgreSQL server
The
RelStorageandpsycopg2Python packages installedA PostgreSQL database created for your Zope instance
Step 1: set the storage type¶
In your instance.yaml, set the storage backend to relstorage:
default_context:
db_storage: relstorage
Step 2: set the blob mode¶
RelStorage stores blobs in the database. Your Zope client needs a local cache
directory for blob data. Set the blob mode to cache:
default_context:
db_storage: relstorage
db_blob_mode: cache
Important
You must set db_blob_mode to cache when using RelStorage.
The default value shared is only appropriate for direct filestorage.
Step 3: choose the database backend¶
Set the relational database type. PostgreSQL is the recommended choice:
default_context:
db_storage: relstorage
db_blob_mode: cache
db_relstorage: postgresql
Other supported values are mysql, oracle, and sqlite3.
Step 4: configure the connection string¶
Provide the PostgreSQL DSN (Data Source Name) so RelStorage can connect to your database:
default_context:
db_storage: relstorage
db_blob_mode: cache
db_relstorage: postgresql
db_relstorage_postgresql_dsn: "host='localhost' dbname='plone' user='plone' password='secret'"
Complete example¶
Here is a complete, runnable instance.yaml with commonly tuned settings:
default_context:
# Serving (bind to localhost when behind a reverse proxy)
wsgi_listen: 127.0.0.1:8080
initial_user_name: admin
initial_user_password: admin
zcml_package_includes: my.awesome.addon
# Storage
db_storage: relstorage
db_blob_mode: cache
db_relstorage: postgresql
db_relstorage_postgresql_dsn: "host='db' dbname='plone' user='plone' password='secret'"
# Performance tuning
db_cache_size: 50000
db_cache_size_bytes: 1500MB
db_relstorage_keep_history: false
# Blob cache
db_blob_cache_size: 10737418240 # 10 GB
For the full set of annotated sample configurations, including development and other backend variants, see Sample configurations.
Generated helper files¶
When you use RelStorage, the cookiecutter also generates configuration files for RelStorage command-line utilities:
relstorage-pack.conf– Always generated. Used with thezodbpackcommand for database packing and garbage collection.relstorage-export.conf– Generated whendb_relstorage_export_*settings are provided. Used withzodbconvertto export data to a filestorage.relstorage-import.conf– Generated whendb_relstorage_import_*settings are provided. Used withzodbconvertto import data from a filestorage.
Tip
For migrating data between storage backends, the generic
zodb-convert tool is now the
recommended approach. It works with all storage backends and can read storage
configuration directly from zope.conf files.
See Migrate data between storage backends for a step-by-step guide.
Next steps¶
Migrate data between storage backends – Migrate data between any storage backends using
zodb-convert.Database: RelStorage – Full reference for all RelStorage options including caching, replication, MySQL, Oracle, and SQLite settings.
Understanding storage backends – Comparison of all storage backends.