content/shared/influxdb3-admin/databases/create.md
Use the influxdb3 create database command,
the HTTP API, or InfluxDB 3 Explorer
to create a database in {{< product-name >}}.
Use the influxdb3 create database command
to create a database. Provide the following:
{{% show-in "core" %}}
<!--pytest.mark.skip-->[!Important]
Retention periods are immutable in Core
In {{< product-name >}}, retention periods can only be set when creating a database and cannot be changed afterward. If you need to change a retention period, you must create a new database with the desired retention period and migrate your data. {{% /show-in %}}
# Create a database with a 30-day retention period
influxdb3 create database --retention-period 30d DATABASE_NAME
# Create a database with a 90-day retention period using authentication
influxdb3 create database \
--retention-period 90d \
--token AUTH_TOKEN \
DATABASE_NAME
# Create a database with infinite retention (default)
influxdb3 create database DATABASE_NAME
Replace the following:
DATABASE_NAME{{% /code-placeholder-key %}}: the name of the database to createAUTH_TOKEN{{% /code-placeholder-key %}}: your {{% token-link "admin" %}}To create a database using the HTTP API, send a POST request to the /api/v3/configure/database endpoint:
{{% api-endpoint method="POST" endpoint="{{< influxdb/host >}}/api/v3/configure/database" %}}
Include the following in your request:
Content-Type: application/jsonAuthorization: Bearer with your {{% token-link "admin" %}}db (string, required): Database nameretention_period (string, optional): Retention period. If omitted, data doesn't expire.{{% show-in "core" %}}
[!Important]
Retention periods are immutable in Core
In {{< product-name >}}, retention periods can only be set when creating a database and cannot be changed afterward. If you need to change a retention period, you must create a new database with the desired retention period and migrate your data. {{% /show-in %}}
# Create a database with a 30-day retention period
curl --request POST "{{< influxdb/host >}}/api/v3/configure/database" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer AUTH_TOKEN" \
--data '{
"db": "DATABASE_NAME",
"retention_period": "30d"
}'
# Create a database with a 90-day retention period
curl --request POST "{{< influxdb/host >}}/api/v3/configure/database" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer AUTH_TOKEN" \
--data '{
"db": "DATABASE_NAME",
"retention_period": "90d"
}'
# Create a database with infinite retention (default)
curl --request POST "{{< influxdb/host >}}/api/v3/configure/database" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer AUTH_TOKEN" \
--data '{
"db": "DATABASE_NAME"
}'
Replace the following:
DATABASE_NAME{{% /code-placeholder-key %}}: the name of the database to createAUTH_TOKEN{{% /code-placeholder-key %}}: your {{% token-link "admin" %}}A successful request returns HTTP status 200 with the database configuration.
[!Caution] Currently, you can't set a retention period when creating a database in Explorer. To create a database with a retention period, see one of the following:
{{% show-in "core" %}}
[!Important]
Retention periods are immutable in Core
After creating a database in {{< product-name >}}, you cannot change its retention period. {{% /show-in %}}
Use the InfluxDB 3 Explorer web interface to create a database in {{% product-name %}}:
For more information, see Manage databases with InfluxDB 3 Explorer.
By default, data does not expire. When creating a database, set a retention period to automatically delete expired data and optimize storage.
The retention period value is a time duration value made up of a numeric value
plus a duration unit.
For example, 30d means 30 days.
The retention period value cannot be negative or contain whitespace.
[!Warning]
Retention period constraints
- Minimum for data retention: The practical minimum retention period is 1 hour (
1h).- Zero-duration periods: Setting a retention period to
0<unit>(for example,0dor0h) is allowed but marks all data for immediate deletion at query time. This differs from InfluxDB 1.x and 2.x where0dmeant infinite retention.- Infinite retention: Use
noneto set an infinite retention period.
For more information about retention periods, see Data retention.
{{% show-in "core" %}}
[!Important]
Retention periods are immutable in Core
In {{< product-name >}}, retention periods can only be set when creating a database and cannot be changed afterward. If you need to change a retention period, you must create a new database with the desired retention period and migrate your data.
For mutable retention periods and table-level retention, consider upgrading to InfluxDB 3 Enterprise. {{% /show-in %}}
{{% show-in "enterprise" %}}
[!Note]
Database retention serves as default for tables
The database retention period serves as the default retention period for all tables in the database, unless a table has its own retention period defined. Table-level retention periods override database retention periods.
For more information, see Retention period precedence. {{% /show-in %}}
Database names must adhere to the following naming restrictions:
_), dash (-), and forward-slash (/)_)[!Caution]
Underscore prefix reserved for system use
Names starting with an underscore (
_) may be reserved for InfluxDB system use. While {{% product-name %}} might not explicitly reject these names, using them risks conflicts with current or future system features and may result in unexpected behavior or data loss.
mydb
sensor_data
prod-metrics
logs/application
webserver123
my database # Contains whitespace
sensor.data # Contains period
app@server # Contains special character
_internal # Starts with underscore (reserved)
very_long_database_name_that_exceeds_sixty_four_character_limit # Too long
For comprehensive information about naming restrictions for all InfluxDB identifiers, see Naming restrictions and conventions.
In InfluxDB 1.x, data is stored in databases and retention policies. In {{% product-name %}}, databases and retention policies have been merged into databases, where databases have a retention period, but retention policies are no longer part of the data model. Because InfluxQL uses the 1.x data model, a database must be mapped to a v1 database and retention policy (DBRP) to be queryable with InfluxQL.
When naming a database that you want to query with InfluxQL, use the following naming convention to automatically map v1 DBRP combinations to an {{% product-name %}} database:
database_name/retention_policy_name
| v1 Database name | v1 Retention Policy name | New database name |
|---|---|---|
| db | rp | db/rp |
| telegraf | autogen | telegraf/autogen |
| webmetrics | 1w-downsampled | webmetrics/1w-downsampled |
{{% show-in "enterprise" %}} Default maximum number of databases: {{% influxdb3/limit "database" %}} {{% /show-in %}} {{% show-in "core" %}} Maximum number of databases: {{% influxdb3/limit "database" %}} {{% /show-in %}}
For more information about {{< product-name >}} database, table, and column limits, see Database, table, and column limits.