Skip to main content

Tools for deploying necessary schema changes for a perfactema database

Project description

PerFact DBSchemaTools

Tools for deploying necessary schema changes for a perfactema database.

It aims to gradually replace DatabaseModifications by a schema definition delivered in the form of yaml files in a file system structure, so we don't define the steps to perform to arrive at some required schema, but the target schema itself. It also allows introspecting the current database and checking which (additive) change are to be performed to arrive at the correct schema.

The maintainers of this project are:

Technical details

The DBSchemaTools come bundled with an executable perfact-dbschema which is available in /usr/bin. This allows several actions to be performed (check out --help):

  • patch: Compare the current DB against the definitions provided in the schema definition paths and extend the current DB as required.
  • add: Adds an entity to a schema definition path
  • dump: Dumps the full database into a schema definition path. Currently only for debugging.

Additionally, a wrapper perfact-dbschema-add is provided with a sudoers file that allows the user zope to execute it as user perfact on a typical PerFact system. This is intended to be used by the table manager while we transition more and more functionality over.

On a PerFact template system, the package perfact-dbutils-zope4 additionally provides a wrapper perfact-dbschema-patch. This is also used by the zodbsync configuration to make sure that any code deployment runs through the three steps:

  1. Check the schema definitions as recognized by perfact-dbschematools and execute them, before changing anything inside Zope.
  2. Play back DatabaseModifications and related paths, and trigger their application.
  3. Play back any remaining code changes, i.e. the code that depends on the new schema.

A schema definition path is usually something like /opt/perfact/dbutils-zoperepo/__schema__ or a similar path somewhere in /var/lib/perfact/zodbsync/layers for an activated layer package. It contains a folder structure mostly oriented along tables, containing YAML files (and in the future probably also other file formats, when we include function definitions) that describe the entities that we require to be present in the database.

In preparation for a future situation where we can develop for multiple layers on the same system, the main executable perfact-dbschema requires the path to be explicitly named, making its arguments somewhat clumsy at times. Usually, you should not have to interact with it directly, relying on the table manager and on the wrapper perfact-dbschema-patch instead.

Usage from other packages

As of version 26.2.0, perfact-dbschematools no longer uses a virtual environment and can therefore be imported in other Python packages. A package that deploys some schema definitions that it requires to be executed to run can therefore do something like this at startup:

from perfact.dbschematools import patch
patch('/path/to/my/schema/definition', my_connection_string)

Configuration

The default configuration file /etc/pefact/dbschematools/config.yml currently only describes the database connection string.

FAQs

I tried deploying a code state that uses schema definitions and it failed

  • Is perfact-dbutils-zope4 up to date? If you deployed using the layer package perfact-zope-layers-complete, the dependency should be set correctly so the necessary versions are installed, but if you only deployed using a git checkout, you will need to update the packages accordingly.
  • Does the configuration of perfact-dbschematools contain the correct connection string?
  • If you skipped the failures and continued the deployment, but fixed the cause, you can execute perfact-dbschema-patch to retry.
  • Afterwards, you want to retry applying the DatabaseModifications.

During development, a column I created should have a different type after all

  • Edit the file in __schema__/tables/<table>/columns/<column>.yml
  • Execute perfact-dbschema-patch.
  • If the column can not be converted automatically due to completely different types, you will need to first delete the column manually.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

perfact_dbschematools-26.6.1.tar.gz (25.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

perfact_dbschematools-26.6.1-py2.py3-none-any.whl (27.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file perfact_dbschematools-26.6.1.tar.gz.

File metadata

  • Download URL: perfact_dbschematools-26.6.1.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for perfact_dbschematools-26.6.1.tar.gz
Algorithm Hash digest
SHA256 61731450bf7917d9af1add37460ace3183ee2414165bedd56e7971526a5fcb67
MD5 3dcde253090e18e0b1f6290437b01bfa
BLAKE2b-256 546c1dd5b0752255e915b5056cb0a877786f887ab7d668dccbeb80867a9bf2d5

See more details on using hashes here.

File details

Details for the file perfact_dbschematools-26.6.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for perfact_dbschematools-26.6.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b556859ba508befda01df57b7d781337e9cc963ea421828bef3042e02e4d53a9
MD5 98962f2cdbb5d515ebba1822136e16d9
BLAKE2b-256 c304ebfa6166916b1b46f1d7bc076fb288b750f61d2e3c50854e01d3d1903add

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page