maltoe

maltoe

Carbonite - Change tracking using triggers in PostgreSQL

Hello!

Came here to announce Carbonite, a data auditing library for Ecto/PostgreSQL.

In essence, Carbonite wraps an elaborate audit trigger function in some Elixir code to make it readily available in Elixir applications. A little bit of extra API allows convenient access to the audit logs. Its distinctive property, however, is its use of the database transaction as a natural “bracket” around tracked data changes. This bracket is enforced by an association between the change records and a central transactions table, where the foreign key is Postgres’ internal transaction id. The transactions table carries additional operation metadata (like the current user id).

It’s easier to see for yourself: Github, Docs

Carbonite is still very much work-in-progress. We’re currently collecting our first experiences with it, and are still changing the API around as we go. Still, any early feedback and thoughts are appreciated!

Let me know what you think!

Best,
malte

First Post!

ion

ion

nice! any plans to support other DB adapters, or is it strictly postgres?

Most Liked

cpgo

cpgo

I hear you. Just had to work around this last week.
Had to work on a pretty big collection so ActiveRecord’s update_all was perfect for the job. But then I had to manually implement the audit because our current solution relies on the AR callbacks.

Where Next?

Popular in Announcing Top

Hal9000
Here is my first stab at this. README pasted below. https://github.com/Hal9000/elixir_random Comments and critiques are welcome. Thank...
New
zorbash
I created Kitto a framework for dashboards inspired by Dashing. The distributed characteristics of Elixir and the low memory footprint...
New
Qqwy
Hello everyone, I wrote a small library today called MapDiff. It returns a map listing the (smallest amount of) changes to get from map...
New
Crowdhailer
Experimenting with this code. OK.try do user <- fetch_user(1) cart <- fetch_cart(1) order = checkout(cart, user) save_orde...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 30486 241
New
devonestes
Introducing assertions, the library that helps you write really great test assertions! GitHub: GitHub - devonestes/assertions: Helpful a...
New
kevinlang
Hey all, We have made an Ecto3 Adapter for SQLite3, ecto_sqlite3! We have successfully on-boarded the full suite of integration tests (...
New

Other popular topics Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New

We're in Beta

About us Mission Statement