deno-postgres Build Status Gitter chat

WORK IN PROGRESS PostgreSQL driver for Deno

deno-postgres is being developed based on excellent work of node-postgres and pq.

Most of functionality is not yet implemented.

To Do:

  • connecting to database
  • password handling
  • DSN style connection parameters
  • reading connection parameters from environmental variables
  • termination of connection
  • simple queries (no arguments)
  • parsing Postgres data types to native TS types
  • row description
  • parametrized queries
  • connection pooling
  • parsing error response
  • SSL
  • tests, tests, tests

Example

import { Client } from "https://deno.land/x/postgres/mod.ts";

async function main() {
    const client = new Client({ user: "user", database: "test", host: "localhost", port: "5432" });
    await client.connect();
    const result = await client.query("SELECT * FROM people;");
    console.log(result.rows);
    await client.end();
}

main();

API

deno-postgres follows node-postgres API to make transition for Node devs as easy as possible.

Connecting to DB

If any of parameters is missing it is read from environmental variable.

import { Client } from "https://deno.land/x/postgres/mod.ts";

let config;

config = {
    host: "localhost",
    port: "5432",
    user: "user", 
    database: "test",
    application_name: "my_custom_app",
};
// alternatively
config = "postgres://user@localhost:5432/test?application_name=my_custom_app";

const client = new Client(config);
await client.connect();
await client.end();

Queries

Simple query

const result = await client.query('SELECT * FROM people;');
console.log(result.rows);

Parametrized query

const result = await client.query('SELECT * FROM people WHERE age > <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mi>A</mi><mi>N</mi><mi>D</mi><mi>a</mi><mi>g</mi><mi>e</mi><mo>&lt;</mo></mrow><annotation encoding="application/x-tex">1 AND age &lt; </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span></span></span></span>2;', 10, 20);
console.log(result.rows);

// equivalent using QueryConfig interface
const result = await client.query({
    text: 'SELECT * FROM people WHERE age > <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mi>A</mi><mi>N</mi><mi>D</mi><mi>a</mi><mi>g</mi><mi>e</mi><mo>&lt;</mo></mrow><annotation encoding="application/x-tex">1 AND age &lt; </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span></span></span></span>2;', 
    args: [10, 20]
});
console.log(result.rows);

License

There are substantial parts of this library based on other libraries. They have preserved their individual licenses and copyrights.

Eveything is licensed under the MIT License.

All additional work is copyright 2018 - 2019 — Bartłomiej Iwańczuk — All rights reserved.