Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fortunejs/fortune-postgres
Postgres adapter for Fortune.
https://github.com/fortunejs/fortune-postgres
postgres postgres-adapter postgresql
Last synced: about 2 months ago
JSON representation
Postgres adapter for Fortune.
- Host: GitHub
- URL: https://github.com/fortunejs/fortune-postgres
- Owner: fortunejs
- License: mit
- Created: 2013-09-10T21:41:16.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2023-07-19T05:23:54.000Z (over 1 year ago)
- Last Synced: 2024-11-06T08:48:20.214Z (2 months ago)
- Topics: postgres, postgres-adapter, postgresql
- Language: JavaScript
- Homepage:
- Size: 205 KB
- Stars: 23
- Watchers: 3
- Forks: 21
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Fortune Postgres Adapter
[![Build Status](https://img.shields.io/travis/fortunejs/fortune-postgres/master.svg?style=flat-square)](https://travis-ci.org/fortunejs/fortune-postgres)
[![npm Version](https://img.shields.io/npm/v/fortune-postgres.svg?style=flat-square)](https://www.npmjs.com/package/fortune-postgres)
[![License](https://img.shields.io/npm/l/fortune-postgres.svg?style=flat-square)](https://raw.githubusercontent.com/fortunejs/fortune-postgres/master/LICENSE)This is a Postgres adapter for Fortune which makes use of specific Postgres functionality. Key features include:
- **Non-destructive table setup**: it will create tables and columns automatically upon connection, but will not alter columns. Data migrations are not handled by this adapter.
- **Emulates array foreign keys**: this adapter will *not* create junction tables, but instead create array columns, which is much faster than joins but lacks a database-level foreign key constraint, this is delegated to Fortune.
- **SQL query building**: it interprets arguments from Fortune's adapter interface directly, and generates optimized queries.To use this adapter, the [database user](http://www.postgresql.org/docs/9.4/static/app-createuser.html) must be setup prior to attempting to connect, or the default `postgres` user can be used.
*This adapter, along with Fortune.js, does not implement ORM. This adapter sets up tables, and translates the adapter interface directly into SQL statements. It is a plain query builder for Postgres.*
## Requirements
- Postgres version **9.4** or newer. Older versions are untested and will not work.
## Usage
Install the `fortune-postgres` package from `npm`:
```
$ npm install fortune-postgres
```Then use it with Fortune:
```js
const fortune = require('fortune')
const postgresAdapter = require('fortune-postgres')const store = fortune({ ... }, {
adapter: [
postgresAdapter,
{
// options object, URL is mandatory.
url: `postgres://${username}:${password}@${host}:${port}/${db}`
}
]
})
```## Options
- `url`: Connection URL string. **Required** if no other connection options are given. Add the query param `ssl=true` to enable SSL.
- `connection`: Connection object, see [documentation](https://github.com/brianc/node-pg-pool). This takes precendence over the URL. Optional.
- `pool`: an instance of `node-pg-pool` can be passed in directly. This takes precendence over all connection settings. Optional.
- `isNative`: Whether or not to use native bindings, requires `pg-native` module, which is an optional dependency of this one. Default: `false`.
- `typeMap`: an object keyed by type name and valued by table name.
- `primaryKeyType`: Data type of the primary key. May be `String`, `Number`, or a string for custom type. Default: `String`.
- `generatePrimaryKey`: A function that accepts one argument, the `type` of the record, and returns either a `String` or `Number`. By default,
it returns 15 random bytes, base64 encoded in a URI-safe way. Set this to a falsey value like `null` to turn this off.
- `useForeignKeys`: Whether or not to use foreign key constraint, optional since it will only be applied to non-array fields. Default: `false`.## Extension
The `query` field for the `options` object should be a function that accepts two arguments, the prepared SQL query and parameters, and returns an SQL query.
## SSL
SSL can be enabled by adding `ssl=true` as a query parameter the database URL (e.g. `postgres://postgres@localhost:5432/app_db?ssl=true`). If using the `connection` object, add an `ssl` property with the value `true`.
## Internal Usage
The database client pool is exposed as the `pool` property on the adapter instance, so for example, `store.adapter.pool` (or the alias `store.adapter.client`) lets you use the Postgres driver directly. This should be considered private since it is provided by the underlying implementation `node-pg-pool`, and is exposed for the sake of transparency.
For more on the API of the `pool` object, refer to [the node-pg-pool documentation](https://github.com/brianc/node-pg-pool).
## License
This software is licensed under the [MIT License](//github.com/fortunejs/fortune-postgres/blob/master/LICENSE).