@rxifyjs/pg
v1.2.2
Published
RxJS wrapper for "pg"
Downloads
1
Readme
@rxifyjs/pg
Provides RxJS wrappers for node-postgres and a cli for executing local Postgres files and scripts.
We have attempted to create wrappers for most of the functionality that is required for the middle tier of an application, including connection pooling, cursors, query streaming, and one-off client creation.
If you identify a missing features or bug, open a PR or submit a feature request or bug report.
For detailed documentation, visit our GitHub page.
CLI
pg-runner
is a lightweight alternative to Postgres IDEs.
It provides developers with the ability to run SQL scripts and queries
directly from their VSCode terminal.
Options
| Option | Alias | Description |
| ----------- | ----- | --------------------------------------------------- |
| --script
| -s
| Execute a script wrapped in double quotes. |
| --path
| -p
| Provide a path to a local .sql
script to execute. |
| --format
| -f
| The format of the results printed to the console. |
| --values
| -v
| Provide dynamic values. |
| --cursors
| | Flag indicating that -s
or -p
returns cursors. |
| --psql
| | Opens a psql session. |
Examples
--script
$ pg-runner --script "SELECT * FROM my_table"
SELECT RETURNED n rows.
┌─────────┬────────────┬───────────┬──────────┐
│ (index) │ column_a │ column_b │ column_n │
├─────────┼────────────┼───────────┼──────────┤
│ 1 │ 'aa_val' │ 'ab_val' │ 'an_val' │
│ 2 │ 'ba_val' │ 'bb_val' │ 'bn_val' │
│ n │ 'na_val' │ 'nb_val' │ 'nn_val' │
└─────────┴────────────┴───────────┴──────────┘
--path
$ pg-runner --path "./my-script.sql"
SELECT RETURNED n rows.
┌─────────┬────────────┬───────────┬──────────┐
│ (index) │ column_a │ column_b │ column_n │
├─────────┼────────────┼───────────┼──────────┤
│ 1 │ 'aa_val' │ 'ab_val' │ 'an_val' │
│ 2 │ 'ba_val' │ 'bb_val' │ 'bn_val' │
│ n │ 'na_val' │ 'nb_val' │ 'nn_val' │
└─────────┴────────────┴───────────┴──────────┘
--cursors
When you include the --cursors
flag, the pg-runner
assums
that the query's initial result set is the cursors.
It then calls FETCH ALL
on each cursor returned by the initial query.
$ sql-runner --script "SELECT * FROM get_all_users()" --cursors
--values
For scripts that accept arguments, you pass parameters with the
--values
option, which accepts a list of space-separated values:
$ sql-runner --script "SELECT * FROM get_user_by_lastname(\$1)" --values Smith
$ sql-runner --script "SELECT * FROM get_user_by_lastname_firstname(\$1, \$2)" --values Smith John
It is important to note that you must escape the parameters; for example,
do not enter "$1"
, enter "\$1"
.
Installation
You can use pg-runner
globally by running the following command:
$ npm install -g @rxifyjs/pg
If you only want to use pg-runner
in your application, you can run...
$ npm install --save @rxifyjs/pg
$ npx pg-runner ...
Testing
This library uses the @databases/pg
library to test. Before testing, you need to run the following commands to
start and initialize the test database:
$ npm run db:start
$ npm run db:init
This will spin up a docker database instance and run an init script that creates test tables, inserts their data, and creates test functions.
Note on Unit Testing
When we implemented the
Jest hooks outlined in the @databases/pg
docs,
we ran into an issue where the database is spun down before tests complete.
While we're working on fixing this issue, run the following command
before running unit tests:
$ npm run db:start
After tests have completed, run...
$ npm run db:stop
These commands will spin up and spin down a test Postgres database.