postgraphile-upsert-plugin
Version:
add postgres upsert mutations to postgraphile
89 lines (63 loc) • 2.13 kB
Markdown
# postgraphile-upsert-plugin
Add postgres `upsert` mutations to [postgraphile](https://www.graphile.org/postgraphile).
[](https://github.com/semantic-release/semantic-release)
[](https://github.com/cdaringe/postgraphile-upsert/actions/workflows/main.yml)
## Getting Started
### Install
```bash
pnpm install --save postgraphile-upsert-plugin
```
### CLI
```bash
postgraphile --append-plugins postgraphile-upsert-plugin:PgMutationUpsertPlugin
```
See [here](https://www.graphile.org/postgraphile/extending/#loading-additional-plugins) for more information about loading plugins with PostGraphile.
### Library
```ts
import express from "express";
import { postgraphile } from "postgraphile";
import PgMutationUpsertPlugin from "postgraphile-upsert-plugin";
const app = express();
app.use(
postgraphile(pgConfig, schema, {
appendPlugins: [PgMutationUpsertPlugin],
})
);
app.listen(5000);
```
## Usage
This plugin supports an optional `where` clause in your `upsert<Table>` mutation. Supports multi-column unique indexes.
## Example
```sql
create table bikes (
id serial primary key,
make varchar,
model varchar
serial_number varchar unique not null,
weight real
)
```
A basic upsert would look like this:
```graphql
mutation {
upsertBike(
where: { serial_number: "abc123" }
input: {
bike: {
make: "kona"
model: "kula deluxe"
serial_number: "abc123"
weight: 25.6
}
}
) {
clientMutationId
}
}
```
## [Smart Tags](https://www.graphile.org/postgraphile/smart-tags/) Support
- Add `@omit updateOnConflict` to column comments to prevent them from being modified on _existing_ rows in an upsert mutation.
## Contributing
See [`CONTRIBUTING.md`](./.github/CONTRIBUTING.md).
## Credits
- This is a typescript-ified knock off of [the original upsert plugin](https://github.com/einarjegorov/graphile-upsert-plugin/blob/master/index.js)