Skip to main content

Versioning and auditing extension for PostgreSQL and SQLAlchemy.

Project description

Build Status Version Status Downloads

Auditing extension for PostgreSQL. Provides additional extensions for SQLAlchemy and Flask. PostgreSQL-Audit tries to combine the best of breed from existing solutions such as SQLAlchemy-Continuum, Papertrail and especially Audit Trigger by 2nd Quadrant.

Compared to existing solutions PostgreSQL-Audit has the following charasteristics:

  • Stores all versions into single table called ‘activity’

  • Uses minimalistic trigger based approach to keep INSERTs, UPDATEs and DELETEs as fast as possible

  • Tracks actor IDs to be able to answer these questions quickly:
    • Who modified record x on day x?

    • What did person x do between y and z?

    • Can you show me the activity history of record x?

Installation

pip install PostgreSQL-Audit

Running the tests

git clone https://github.com/kvesteri/postgresql-audit.git
cd postgresql-audit
pip install tox
createdb postgresql_audit_test
tox

Flask extension

from postgresql_audit.flask import versioning_manager

from my_app.extensions import db


versioning_manager.init(db.Model)


class Article(db.Model):
    __tablename__ = 'article'
    __versioned__ = {}  # <- IMPORTANT!
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)


article = Article(name='Some article')
db.session.add(article)
db.session.commit()

Now we can check the newly created activity.

Activity = versioning_manager.activity_cls

activity = Activity.query.first()
activity.id             # 1
activity.table_name     # 'article'
activity.verb           # 'insert'
activity.old_data       # None
activity.changed_data   # {'id': '1', 'name': 'Some article'}
article.name = 'Some other article'
db.session.commit()

activity = Activity.query.order_by(db.desc(Activity.id)).first()
activity.id             # 2
activity.table_name     # 'article'
activity.verb           # 'update'
activity.object_id      # 1
activity.old_data       # {'id': '1', 'name': 'Some article'}
activity.changed_data   # {'name': 'Some other article'}
db.session.delete(article)
db.session.commit()

activity = Activity.query.order_by(db.desc(Activity.id)).first()
activity.id             # 3
activity.table_name     # 'article'
activity.verb           # 'delete'
activity.object_id      # 1
activity.old_data       # {'id': '1', 'name': 'Some other article'}
activity.changed_data   # None

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

postgresql_audit-0.17.1.tar.gz (28.5 kB view details)

Uploaded Source

Built Distribution

postgresql_audit-0.17.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file postgresql_audit-0.17.1.tar.gz.

File metadata

  • Download URL: postgresql_audit-0.17.1.tar.gz
  • Upload date:
  • Size: 28.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for postgresql_audit-0.17.1.tar.gz
Algorithm Hash digest
SHA256 7816def8826ecd2f6d4b720762829512a00ab4fdd6d3cac266eca7cef5865832
MD5 91f4a01b46c0763b855a992b99a2f4a5
BLAKE2b-256 afe84aa7c0d8388a230545144d9e0880714c2236702d1e712321bfa7ea68b343

See more details on using hashes here.

File details

Details for the file postgresql_audit-0.17.1-py3-none-any.whl.

File metadata

File hashes

Hashes for postgresql_audit-0.17.1-py3-none-any.whl
Algorithm Hash digest
SHA256 499952dc028b5bb7baaa0262b98c0b26a07fc3e2929ab47a54149d1d333afd7f
MD5 e068254f68bf68d4b3ad9889c4218de9
BLAKE2b-256 fb0d6d19ac0335644a862830dfc7f9b224b2ca84b82b4f346763d3f75d24fd43

See more details on using hashes here.

Supported by

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