This module helps you pull your PostgreSQL database into Gatsby with minimal effort.
To help us develop this software sustainably under the MIT license, we ask all individuals and businesses that use it to help support its ongoing maintenance and development via sponsorship.
And please give some love to our featured sponsors 🤩:
Surge * |
Story.ai * |
Chad Furman * |
The Guild * |
Qwick * |
Fanatics * |
Dovetail * |
Enzuzo * |
* Sponsors the entire Graphile suite
To install:
yarn add gatsby-source-pg
(or npm install --save gatsby-source-pg
)
Then add the config to your gatsby-config.js
:
module.exports = {
/* ... */
plugins: [
/* ... */
{
resolve: "gatsby-source-pg",
options: {
connectionString: "postgres://user:pass@host/dbname",
schema: "public",
refetchInterval: 60, // Refetch data every 60 seconds
},
},
],
};
The connectionString
can be any valid PostgreSQL connection string, a full
connection string might look like:
postgres://pg_user:pg_pass@pg_host:pg_port/pg_db?ssl=1
{
postgres {
allPostsList {
id
authorId
userByAuthorId {
id
username
}
title
}
}
}
For a working example of gatsby-source-pg
, see
gatsby-source-pg-example.
This plugin uses
gatsby-source-graphql
to merge the PostGraphile GraphQL schema into Gatsby's.
This plugin is powered by PostGraphile, which is built on the highly flexible and customisable Graphile Engine.
You can add to options
most of the
PostGraphile schema-only options
In addition, we accept the typeName
and fieldName
options from
gatsby-source-graphql
which affect how the schema is namespaced, and the
refetchInterval
setting to trigger refetching data every X seconds.
A common thing you might want to do is to shorten the names that PostGraphile
uses by default, you can do this using a plugin such as
@graphile-contrib/pg-simplify-inflector
:
// gatsby-config.js
module.exports = {
/* ... */
plugins: [
/* ... */
{
resolve: "gatsby-source-pg",
options: {
connectionString: "postgres:///mydb",
schema: "public",
/* 👇 */
appendPlugins: [require("@graphile-contrib/pg-simplify-inflector")],
/* 👆 */
},
},
],
};
Pop into the Graphile Discord: http://discord.gg/graphile