# Database configuration
The ./config/database.js
file (or the ./config/database.ts
file for TypeScript) is used to define database connections that will be used to store the application content.
️❗️ WARNING
Strapi applications are not meant to be connected to a pre-existing database, not created by a Strapi application, nor connected to a Strapi v3 database. The Strapi team will not support such attempts. Attempting to connect to an unsupported database may, and most likely will, result in lost data.
🤓 Supported databases
The CLI installation guide details supported database and versions.
# Configuration structure
The ./config/database.js
(or ./config/database.ts
for TypeScript) accepts 2 main configuration objects:
connection
for database configuration options passed to Knex.js (opens new window)settings
for Strapi-specific database settings
# connection
configuration object
Parameter | Description | Type | Default |
---|---|---|---|
client | Database client to create the connection. sqlite or postgres or mysql . | String | - |
connection | Database connection information | Object | - |
debug | Show database exchanges and errors. | Boolean | false |
useNullAsDefault Optional, only for SQLite | Use NULL as a default value | Boolean | true |
pool Optional | Database pooling options | Object | - |
acquireConnectionTimeout Optional | How long knex will wait before throwing a timeout error when acquiring a connection (in milliseconds) | Integer | 60000 |
# Connection parameters
The connection.connection
object found in ./config/database.js
(or ./config/database.ts
for TypeScript) is used to pass database connection information and accepts the following parameters:
Parameter | Description | Type |
---|---|---|
connectionString | Database connection string. When set, it overrides the other connection.connection properties. To disable use an empty string: '' . | String |
host | Database host name. Default value: localhost . | String |
port | Database port | Integer |
database | Database name. | String |
user | Username used to establish the connection | String |
password | Password used to establish the connection | String |
timezone | Set the default behavior for local time. Default value: utc Timezone options (opens new window) | String |
schema | Set the default database schema. Used only for Postgres DB. | String |
ssl | For SSL database connection. Use an object to pass certificate files as strings. | Boolean or Object |
# Database pooling options
The connection.pool
object optionally found in ./config/database.js
(or ./config/database.ts
for TypeScript) is used to pass Tarn.js (opens new window) database pooling options and accepts the following parameters:
✋ CAUTION
When using Docker, change the pool min
value to 0
as Docker will kill any idle connections, making it impossible to keep any open connections to the database (see Tarn.js's pool (opens new window) settings used by Knex.js for more information).
Parameter | Description | Type | Default |
---|---|---|---|
min | Minimum number of database connections to keepalive | Integer | 2 |
max | Maximum number of database connections to keepalive | Integer | 10 |
acquireTimeoutMillis | Time in milliseconds before timing out a database connection attempt | Integer | 60000 |
createTimeoutMillis | Time in milliseconds before timing out a create query attempt | Integer | 30000 |
destroyTimeoutMillis | Time in milliseconds before timing out a destroy query attempt | Integer | 5000 |
idleTimeoutMillis | Time in milliseconds before free database connections are destroyed | Integer | 30000 |
reapIntervalMillis | Time in milliseconds to check for idle database connections to destroy | Integer | 1000 |
createRetryIntervalMillis | Time in milliseconds to idle before retrying failed create actions | Integer | 200 |
afterCreate | Callback function to execute custom logic when the pool acquires a new connection. See the Knex.js documentation (opens new window) for more information | Function | - |
# settings
configuration object
The settings
object found in ./config/database.js
(or ./config/database.ts
for TypeScript) is used to configure Strapi-specific database settings and accepts the following parameter:
Parameter | Description | Type | Default |
---|---|---|---|
forceMigration | Enable or disable the forced database migration. | Boolean | true |
# Configuration examples
# Configuration in database
Configuration files are not multi-server friendly. To update configurations in production you can use a data store to get and set settings.
# Get settings
environment
(string): Sets the environment you want to store the data in. By default it's current environment (can be an empty string if your configuration is environment agnostic).type
(string): Sets if your configuration is for anapi
,plugin
orcore
. By default it'score
.name
(string): You have to set the plugin or api name iftype
isapi
orplugin
.key
(string, required): The name of the key you want to store.
// strapi.store(object).get(object);
// create reusable plugin store variable
const pluginStore = strapi.store({
environment: strapi.config.environment,
type: 'plugin',
name: 'users-permissions',
});
await pluginStore.get({ key: 'grant' });
2
3
4
5
6
7
8
9
10
# Set settings
value
(any, required): The value you want to store.
// strapi.store(object).set(object);
// create reusable plugin store variable
const pluginStore = strapi.store({
environment: strapi.config.environment,
type: 'plugin',
name: 'users-permissions'
});
await pluginStore.set({
key: 'grant',
value: {
...
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Databases installation guides
Strapi gives you the option to choose the most appropriate database for your project. It currently supports PostgreSQL, SQLite, MySQL and MariaDB.
The following documentation covers how to install SQLite locally (for development purposes):
✋ CAUTION
Installation guides for other databases (MySQL, MariaDB) are being reworked. Contributions (opens new window) are most welcome.