Knex 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 Knex adapter is a general purpose adapter which can be used to connect to a range of different database backends.
At present, the only fully tested backend is Postgres
, however Knex gives the potential for MSSQL
, MySQL
, MariaDB
, SQLite3
, Oracle
, and Amazon Redshift
to be supported.
Usage
const { KnexAdapter } = require('@keystonejs/adapter-knex');
const keystone = new Keystone({
adapter: new KnexAdapter({...}),
});
Config
schemaName
Default: 'public'
All postgres tables are grouped within a schema and public
is the default schema.
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'.
knexOptions
These options are passed directly through to Knex.
See the knex docs for more details.
Default:
{
client: 'postgres',
connection: process.env.CONNECT_TO || process.env.DATABASE_URL || process.env.KNEX_URI
}
Debugging
To log all Knex queries, run the server with the environment variable DEBUG=knex:query
.
Setup
Before running Keystone with the Knex adapter you should configure a database. By default Knex will look for a Postgres database on the default port, matching the project name, as the current user.
In most cases this database will not exist and you will want to configure a user and database for your application.
Assuming you're on MacOS and have Postgres installed the build-test-db.sh
does this for you:
./build-test-db.sh
Otherwise, you can run these steps manually:
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: postgres://keystone5:change_me_plz@localhost:5432/keystone