tableware
v0.0.2
Published
Delicious PostgreSQL tables... always cooked fresh from JSON Schemas!
Downloads
3
Readme
tableware
Delicious PostgreSQL tables... always cooked fresh from JSON Schemas!
Install
$ npm install tableware --save
Basic usage
var Tableware = require('tableware')
var tableware = new Tableware()
// Ensure you've got PG_CONNECTION_STRING set, for example:
// PG_CONNECTION_STRING=postgres://postgres:postgres@localhost:5432/test_db
tableware.sync (
{
sourceDirs: [
{
path: '/my/json/schemas/myApp', // Where your JSON schema files live
namespace: 'tableware_test' // Helps group/isolate these files
}
]
},
function (err) {
// Database tables ready in a 'tableware_test' schema!
}
)
Why?
If you've a bunch of JSON Schema files to describe the content of your JSON data, then good news: you've also got everything to create a great relational database to store your JSON docs in too!
"Erm... why not just throw everything at MongoDB, or use PostgreSQL's JSONB columns?"
In cases like this you've already got a schema... you know what to expect. It's probably a backward step to go schema- less. Yup, there's the brilliant Mongoose.js and similar... but is there a compelling reason to say "No!" to SQL?
That's were Tableware comes in.
With the minimum of fuss, Tableware will synchronize objects in a PostgreSQL database so that it can store documents adhering to 1 or more JSON schemas - but in a sane relational model. Tableware hopes to help you get the most out of the brilliant PostgreSQL... while still providing a warm-and-welcoming home for your JSON docs.
| Something in JSON Schema | Something in PostgreSQL | | -------------------------| ----------------------- | | Directory (or some other logical grouping) of JSON Schemas | Database schema | | JSON Schema file | Table | | properties | Columns | | A property that's an Array of an object | Child table - enforced with foreign key constraints | | required | NOT NULL constraint | | description | Table/Column comment |
"Sounds a bit brittle, what happens if my JSON Schema changes?"
Tableware uses reflection to study the current structure of your database and will issue all the necessary CREATE/ALTER statements to get things in-sync again. All DML statements run in a single all-or-nothing transaction, so no need for migration files either!
"That's great and everything, but I've still got to somehow get my nested JSON docs into and out-of those tables?"
Loads of cool projects for that!
Tests
To run the tests you'll need to set a PG_CONNECTION_STRING
environment variable to point to a PostgreSQL database, for example:
PG_CONNECTION_STRING=postgres://postgres:postgres@localhost:5432/test_db
- And you'll also need to have created that database already (e.g.
test_db
in the example string above)
$ npm test