pg-co

1.13.1 • Public • Published

A ES6 wrapper (co & generator based - async/await style) for node-postgres.

Build Status Coverage Status NPM version

Example

var pg  = require('pg-co');
var SQL = require('sql-template');

var conString = "postgres://postgres:1234@localhost/postgres";

var client = new pg(conString);

co(function*(){
  var line;
  line = yield client.row(SQL`SELECT * FROM users WHERE id=${22}`);
  // same line = yield client.row('users', {id:22});
  if(!line)
    throw "Missing user";

  yield client.insert("users_log", {
    user_id : 22,
    time    : Date.now(),
  });
});

API

await client.select(table [,condition = true [, columns = * [, extra ]]])

await client.select(PG_TEMPLATED_QUERY)

Select stuffs ? what did you expect ...

var line = yield client.select(SQL`SELECT * FROM users WHERE parentId=${22}`);
=> [ {id:1, name : "John doe", parentId:22}, {id:2, name : "Jane doe", parentId:22}]

await client.row(table [,condition = true [, columns = * [, extra = LIMIT 1 ]]])

await client.row(PG_TEMPLATED_QUERY)

return a single row, and a falsy value if no match (see example below)

var line = yield client.row(SQL`SELECT * FROM users WHERE id=${22}`);
=> { id : 22, name : "John doe" }

await client.col(table [,condition = true [, column = * [, extra = '']]])

await client.col(PG_TEMPLATED_QUERY)

return an array of values from a single column

var line = yield client.col('users', true, 'user_id');
=> [22, 1, 25, 55]

await client.insert(table, values)

Insert values in table...

yield client.insert("users_log", {
  user_id : 22,
  time    : Date.now(),
});

await client.update(table, values[, where])

Update values in a table...

yield client.insert("users_log", {
  time    : Date.now(),
}, {
  user_id : 22,
});

await client.delete(table[, where])

Delete rows in a table...

yield client.delete("users_log", "log_weight < 51");

await client.replace(table, values[, where])

Replace values in a table... (lock select using * postgresql FOR UPDATE)

yield client.replace("users_log", {
  time    : Date.now(),
}, {
  user_id : 22,
});

await client.query(queryString);

yield client.query("TRUNCATE TABLE donttruncatemeplznooooo");

await client.truncate(tableName);

yield client.truncate("donttruncatemeplznooooo");

await client.begin() => transaction token

await client.commit(transaction token)

await client.rollback(transaction token)

Start/commit/rollback a transaction (or a savepoint, if nested)

var transaction_token = await client.begin();
if(Math.random() < 0.5)
  await client.commit(transaction_token);
else  await client.rollback(transaction_token);

Recommended template string engine

Not invented here / key features

  • Supported nested transaction (through savepoints)
  • Sane API = sane implementation (whole lib is < 150 lines)

Credits

Readme

Keywords

none

Package Sidebar

Install

npm i pg-co

Weekly Downloads

6

Version

1.13.1

License

ISC

Last publish

Collaborators

  • frodon