Skip to main content

a schema version control system

Project description

schema_cntl

A Python library created by Makpar Innovation Lab for versioning database schemas. Currently compatible with PostgreSQL. schema_cntl uses AWS QLDB to maintain a revision history of a schema.json. This file defines the schema at a single point in time. As schema.json changes are committed, the revision history expands. This library generates SQL statements that allow the user to transform the schema from one revision to another.

Setup

PyPi Package

This is a command line utility. To use it, you must install the latest distribution from PyPi,

pip install schema_cntl

QLDB

This library uses innoldb, another package supported by the Makpar Innovation Lab, to persist the schema.json to an AWS Quantum Ledger Database. As such, in order to use this package, you will need to create a QLDB ledger and an IAM account with permissions to access that ledger. For more detailed instructions on setting the necesssary resources on AWS, refer to the innoldb documentation

Environment Variables

You will need to point the LEDGER environment variable to the name of the QLDB ledger and the TABLE environment variable to the name of the table you intend to use. The ledger must exist, but if the table does not exist, schema_cntl will create a new one.

export LEDGER="<ledger-name>"
export TABLE="<table>"

Schema JSON

A database schema is specified through a JSON configuration file formatted as follows,

{
  "schema": {
      "name": "<schema-name>",
      "engine": "<postgres | ... >",
      "tables": [
          {
              "name": "<table-name>",
              "columns": [
                  {
                    "name": "<name>",
                    "type": "<bool | varchar | float8 | int | decimal | date> : ignored if primary key == true",
                    "limit": "<limit> : optional, defaults to None",
                    "primary_key": "<true | false> : optional, defaults to false",
                    "foreign_key_references" : "<fk> : optional, defaults to None",
                    "not_null": "<true | false> : optional, defaults to false"
                  }
              ]
          }
      ]
    }
}

For example, the following schema creates a table named test_table with three fields: a primary key field unique_id, an integer field sample_int and a text field sample_text.

{
    "schema": {
        "engine": "postgres",
        "name": "test_schema",
        "tables": [
            {
                "name": "test_table",
                "columns": [
                    {
                        "name": "unique_id",
                        "primary_key": true
                    },
                    {
                        "name": "sample_int",
                        "type": "int"
                    },
                    {
                        "name": "sample_text",
                        "type": "text"
                    }
                ]
            }
        ]
    }
}

Workflow

  1. Commit Revision
  2. List Revision History
  3. Generate Schema
  4. Generate Differences

Commit

schema_cntl commit <path-to-schema.json>

List Revision History

schema_cntl history <path-to-schema.json> --limit <revision_limit>

Generate Schema

schema_cntl schema <path-to-schema.json> <revision>

Generate Differences

schema_cntl diff <path-to-schema.json> <start_revision> <end_revision>

Code Quality

DeepSource DeepSource

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

schema_cntl-1.0.1.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

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

schema_cntl-1.0.1-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file schema_cntl-1.0.1.tar.gz.

File metadata

  • Download URL: schema_cntl-1.0.1.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10

File hashes

Hashes for schema_cntl-1.0.1.tar.gz
Algorithm Hash digest
SHA256 30221d615a1266ed3fda8361a61323fc4a53822c1b1535fa5ee207ad68a308f8
MD5 85846b84db0c405f820d569a745f8949
BLAKE2b-256 ec7e64df6a0921a1ca3c2dfeafd92898b327fc57d54c4cf90bd06fbc1298f1d7

See more details on using hashes here.

File details

Details for the file schema_cntl-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: schema_cntl-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10

File hashes

Hashes for schema_cntl-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d9efec312e0a3234cfc4a4dfbebc02d19017f603cfe64d7c41d54aeb1ef6fca3
MD5 ed25842747c28dad2cbd527f1ae94dfd
BLAKE2b-256 08cc5f071d348e04eaa08edefaeb0655fc2bad5af29fd81d1c5bd4af0e3dd997

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