deno-postgres
A lightweight PostgreSQL driver for Deno focused on user experience
deno-postgres
is being developed based on excellent work of
node-postgres and
pq.
Example
// deno run --allow-net --allow-read --unstable mod.ts
import { Client } from "https://deno.land/x/postgres/mod.ts";
const client = new Client({
user: "user",
database: "test",
hostname: "localhost",
port: 5432,
});
await client.connect();
{
const result = await client.queryArray("SELECT ID, NAME FROM PEOPLE");
console.log(result.rows); // [[1, 'Carlos'], [2, 'John'], ...]
}
{
const result = await client.queryArray
`SELECT ID, NAME FROM PEOPLE WHERE ID = ${1}`;
console.log(result.rows); // [[1, 'Carlos']]
}
{
const result = await client.queryObject("SELECT ID, NAME FROM PEOPLE");
console.log(result.rows); // [{id: 1, name: 'Carlos'}, {id: 2, name: 'Johnru'}, ...]
}
{
const result = await client.queryObject
`SELECT ID, NAME FROM PEOPLE WHERE ID = ${1}`;
console.log(result.rows); // [{id: 1, name: 'Carlos'}]
}
await client.end();
For more examples visit the documentation available at https://deno-postgres.com/
Why do I need unstable to connect using TLS?
Sadly, stablishing a TLS connection in the way Postgres requires it isn't
possible without the Deno.startTls
API, which is currently marked as unstable.
This is a situation that will be solved once this API is stabilized, however I
don't have an estimated time of when that might happen.
Documentation
The documentation is available on the deno-postgres website https://deno-postgres.com/
Join me on Discord as well! It's a good place to discuss bugs and features before opening issues
Contributing
Prerequisites
You must have
docker
anddocker-compose
installed in your machineYou don't need
deno
installed in your machine to run the tests, since it will be installed in the Docker container when you build it. However you will need it in order to run the linter and formatter locally- https://deno.land/
deno upgrade --version 1.7.1
dvm install 1.7.1 && dvm use 1.7.1
You don't need to install Postgres locally in your machine in order to test the library, it will run as a service in the Docker container when you build it
Running the tests
The tests are found under the ./tests
folder, and they are based on query
result assertions
In order to run the tests run the following commands
docker-compose build tests
docker-compose run tests
The build step will check linting and formatting as well and report it to the command line
It is recommended that you don't rely on any previously initialized data for your tests, instead of that create all the data you need at the moment of running the tests
For example, the following test will create a temporal table that will dissapear once the test has been completed
Deno.test("INSERT works correctly", async () => {
await client.queryArray(
`CREATE TEMP TABLE MY_TEST (X INTEGER);`,
);
await client.queryArray(
`INSERT INTO MY_TEST (X) VALUES (1);`,
);
const result = await client.queryObject<{ x: number }>({
text: `SELECT X FROM MY_TEST`,
fields: ["x"],
});
assertEquals(result.rows[0].x, 1);
});
Deno compatibility
Due to a not intended breaking change in Deno 1.9.0, two versions of
deno-postgres
require a specific version of Deno in order to work correctly,
the following is a compatibility table that ranges from Deno 1.8 to Deno 1.9 and
above indicating possible compatibility problems
Deno version | Min driver version | Max driver version |
---|---|---|
1.8.x | 0.5.0 | 0.10.0 |
1.9.0 | 0.11.0 | 0.11.1 |
1.9.1 and up | 0.11.2 |
Contributing guidelines
When contributing to repository make sure to:
- All features and fixes must have an open issue in order to be discussed
- All public interfaces must be typed and have a corresponding JS block explaining their usage
- All code must pass the format and lint checks enforced by
deno fmt
anddeno lint --unstable
respectively. The build will not pass the tests if this conditions are not met. Ignore rules will be accepted in the code base when their respective justification is given in a comment - All features and fixes must have a corresponding test added in order to be accepted
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 - 2021 — Bartłomiej Iwańczuk and Steven Guerrero — All rights reserved.