Prisma database adapter
This is the last active development release of this package as Keystone 5 is now in a 6 to 12 month active maintenance phase. For more information please read our Keystone 5 and beyond post.
The Prisma adapter allows Keystone to connect a database using Prisma Client, a type-safe and auto-generated database client. You can learn more about Prisma Client in the Prisma docs.
Tip: Want to get started with Keystone + Prisma? Follow the guide!
Warning: The Keystone Prisma adapter is not currently production-ready. It depends on the Prisma Migrate system which is currently flagged as
Preview
. Once Prisma Migrate is out of preview mode, we will release a production-ready version of this package.Note: This adapter currently only supports PostgreSQL databases, and has other limitations. For more details, see our Prisma Adapter - Production Ready Checklist
Usage
const { PrismaAdapter } = require('@keystonejs/adapter-prisma');
const keystone = new Keystone({
adapter: new PrismaAdapter({ url: 'postgres://...' }),
});
Config
url
Default: DATABASE_URL
The connection string for your database, in the form postgres://<user>:<password>@<host>:<port>/<dbname>
.
By default it will use the value of the environment variable DATABASE_URL
. You can learn more about the connection string format used in the Prisma docs.
getPrismaPath
Default: ({ prismaSchema }) => '.prisma'
A function which returns a directory name for storing the generated Prisma schema and client.
getDbSchemaName
Default: ({ prismaSchema }) => 'public'
A function which returns a database schema name to use for storage of all Keystone tables in your database.
You can also set the schema name by including the suffix
?schema=...
in yourDATABASE_URL
orurl
. In this case you should set this value to() => null
.
enableLogging
Default: false
Enables logging at the query
level in the Prisma client.
dropDatabase
Default: false
Allow the adapter to drop the entire database and recreate the tables / foreign keys based on the list schema in your application. This option is ignored in production, i.e. when the environment variable NODE_ENV === 'production'.
migrationMode
Default: 'dev'
Controls how and when migrations are applied. One of 'dev'
, 'prototype'
, 'createOnly'
, or 'none'
. In prototype
mode, prisma db push
is used to sync the database tables without generating migration files. In dev
mode, migrations files are generated and applied whenever the schema changes. In createOnly
mode, migrations are generated but not applied. In none
mode, no migrations are generated or applied.
Setup
Before running Keystone with the Prisma adapter you will need to have a PostgreSQL database to connect to.
If you already have a database then you can use its connection string in the url
config option.
If you don't have a database already then you can create one locally with the following commands.
createdb -U postgres keystone
psql keystone -U postgres -c "CREATE USER keystone5 PASSWORD 'change_me_plz'"
psql keystone -U postgres -c "GRANT ALL ON DATABASE keystone TO keystone5;"
If using the above, you will want to set a connection string of:
const keystone = new Keystone({
adapter: new PrismaAdapter({ url: `postgres://keystone5:change_me_plz@localhost:5432/keystone` }),
});
See the adapters setup guide for more details on how to setup a database.