32 lines
2.5 KiB
Markdown
32 lines
2.5 KiB
Markdown
|
# Postgraphile
|
||
|
|
||
|
You can expose VulcanizeDB data via [Postgraphile](https://github.com/graphile/postgraphile).
|
||
|
Check out [their documentation](https://www.graphile.org/postgraphile/) for the most up-to-date instructions on installing, running, and customizing Postgraphile.
|
||
|
|
||
|
## Simple Setup
|
||
|
|
||
|
As of April 30, 2019, you can run Postgraphile pointed at the default `vulcanize_public` database with the following commands:
|
||
|
|
||
|
```
|
||
|
npm install -g postgraphile
|
||
|
postgraphile --connection postgres://localhost/vulcanize_public --schema=public,custom --disable-default-mutations
|
||
|
```
|
||
|
|
||
|
Arguments:
|
||
|
- `--connection` specifies the database. The above command connects to the default `vulcanize_public` database defined in [the example config](../staging/environments/public.toml.example).
|
||
|
- `--schema` defines what schema(s) to expose. The above exposes the `public` schema (for core VulcanizeDB data) as well as a `custom` schema (where `custom` is the name of a schema defined in executed transformers).
|
||
|
- `--disable-default-mutations` prevents Postgraphile from exposing create, update, and delete operations on your data, which are otherwise enabled by default.
|
||
|
|
||
|
## Customizing Postgraphile
|
||
|
|
||
|
By default, Postgraphile will expose queries for all tables defined in your chosen database/schema(s), including [filtering](https://www.graphile.org/postgraphile/filtering/) and [auto-discovered relations](https://www.graphile.org/postgraphile/relations/).
|
||
|
|
||
|
If you'd like to expose more customized windows into your data, there are some techniques you can apply when writing migrations:
|
||
|
|
||
|
- [Computed columns](https://www.graphile.org/postgraphile/computed-columns/) enable you to derive additional fields from types defined in your database.
|
||
|
For example, you could write a function to expose a block header's state root over Postgraphile with a computed column - without modifying the `public.headers` table.
|
||
|
- [Custom queries](https://www.graphile.org/postgraphile/custom-queries/) enable you to provide on-demand access to more complex data (e.g. the product of joining and filtering several tables' data based on a passed argument).
|
||
|
For example, you could write a custom query to get the block timestamp for every transaction originating from a given address.
|
||
|
- [Subscriptions](https://www.graphile.org/postgraphile/subscriptions/) enable you to publish data as it is coming into your database.
|
||
|
|
||
|
The above list is not exhaustive - please see the Postgraphile documentation for a more comprehensive and up-to-date description of available features.
|