3.0.0-beta5 • Published 2 years ago

pogi v3.0.0-beta5

Weekly downloads
30
License
MIT
Repository
github
Last release
2 years ago

pogi

What is your dream?

pogi is a wrapper over pg.js to use PostgreSQL easier.

  • it is not an over engineered ORM with new syntax to learn and with less functionality,
  • it is not a simple prepared statements executor with a lot of boilerplate for queries

it is somewhere in between, around the golden middle ground.

Some of the features:

  • typescript support (async-await!) (also can generate the structure for the db)
  • transaction support
  • connection pooling
  • sql file execution
  • BYOL - bring your own logger :) (db/schema/table/query level)
  • encourage mixing jsonb and relational columns (arrays, complex types, enums etc) to get the full power!
  • named parameters for queries
  • stream support

so all the basics that you would expect in 2018.

Install

npm install pogi --save

Documentation (includes why+1?)

here

Our experience on migrating from mongo

Some examples to get the taste

import {PgDb} from "pogi";

let pgdb = await PgDb.connect({connectionString: "postgres://"});

let table = pgdb['test']['users']; //or pgdb.test.users if you generate the interface

let c1 = await pgdb.query(`SELECT COUNT(*) as c FROM ${table} WHERE active=:active`, {active:true});
let c2 = await table.count({active:true});
c1[0].c == c2; //true

//mix json and relational columns (e.g. enumerations)
await table.insert({name:'simply', permissions:['r','w','e'], props:{email:'undefined@dev.null'}});

let rows;

//use the same operators as in postgre
rows = await table.find({'name ~':'Jo.*',                                  //regexp
                         'jsoncolumn @>':{'dream':{'change':'the world'}}, //contains
                         'arraycolumn @>':['up', 'down']});                //contains

//will be transformed to "select * from test.users where id in (1,2,3)"
rows = await table.find({id:[1,2,3]});

//easy fallback
rows = await table.findWhere('"happyWife"="happyLife" and name=:name', {name:'me'});

//convenient functions
let power = await pgdb.queryOneField('SELECT MAX(power) FROM magical.dbhandlers');
power; //>9000

//much more!

It's not without pitfalls

What is? It's just usually not written (definitely not in the front page), but see more in the docs. I wish more project would be honest about it to save a lot of hours for others. If you find more, don't hesitate to tell us!

Contributing

Ideas are welcome! To compile & test

npm run build
npm run test

Changelog

Changelog.md

Handcrafted at

www.labcup.net

3.0.0-beta

2 years ago

3.0.0-beta3

2 years ago

3.0.0-beta2

2 years ago

3.0.0-beta5

2 years ago

3.0.0-beta4

2 years ago

2.11.1

3 years ago

2.11.0

3 years ago

2.10.1

3 years ago

2.10.2

3 years ago

2.10.0

3 years ago

2.9.2

4 years ago

2.9.1

4 years ago

2.9.0

4 years ago

2.8.0

4 years ago

2.7.2

4 years ago

2.7.1

4 years ago

2.6.2

4 years ago

2.6.1

5 years ago

2.5.16

5 years ago

2.5.15

5 years ago

2.5.14

5 years ago

2.5.13

5 years ago

2.5.11

6 years ago

2.5.10

6 years ago

2.5.9

6 years ago

2.5.8

6 years ago

2.5.7

6 years ago

2.5.6

6 years ago

2.5.5

6 years ago

2.5.4

6 years ago

2.5.3

6 years ago

2.5.2

6 years ago

2.5.1

6 years ago

2.4.0

7 years ago

2.3.5

7 years ago

2.3.4

7 years ago

2.3.3

7 years ago

2.3.2

7 years ago

2.3.1

7 years ago

2.3.0

7 years ago

2.2.4

7 years ago

2.2.3

7 years ago

2.2.2

7 years ago

2.2.1

7 years ago

2.2.0

7 years ago

2.1.1

7 years ago

2.1.0

7 years ago

2.0.0

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.2

7 years ago

1.0.1

8 years ago

1.0.0

8 years ago