Databases
A database is a container for SQL objects such as schemas, tables, views, functions, and indexes. In the SerenDB object hierarchy, a database exists within a branch of a project. There is a limit of 500 databases per branch.
If you do not specify your own database name when creating a project, your project's default branch is created with a database called neondb, which is owned by your project's default role (see Manage roles for more information). You can create your own databases in a project's default branch or in a child branch.
All databases in SerenDB are created with a public schema. SQL objects are created in the public schema, by default. For more information about the public schema, refer to The Public schema, in the PostgreSQL documentation.
As of Postgres 15, only a database owner has the `CREATE` privilege on a database's `public` schema. For other users, the `CREATE` privilege must be granted manually via a `GRANT CREATE ON SCHEMA public TO ;` statement. For more information, see [Public schema privileges](/docs/manage/database-access#public-schema-privileges).
Databases belong to a branch. If you create a child branch, databases from the parent branch are copied to the child branch. For example, if database mydb exists in the parent branch, it will be copied to the child branch. The only time this does not occur is when you create a branch that includes data up to a particular point in time. If a database was created in the parent branch after that point in time, it is not duplicated in the child branch.
SerenDB supports creating and managing databases from the following interfaces:
Manage databases in the SerenDB Console
This section describes how to create, view, and delete databases in the SerenDB Console.
The role that creates a database is automatically made the owner of that database. The neon_superuser role is also granted all privileges on databases created in the SerenDB Console. For information about this role, see The neon_superuser role.
Create a database
To create a database:
Navigate to the SerenDB Console.
Select a project.
Select Branches from the sidebar.
Select the branch where you want to create the database.
Select the Roles & Databases tab.
Click Add database.
Enter a database name, and select a database owner.
Click Create.
Some names are not permitted. See [Reserved database names](#reserved-database-names).
View databases
To view databases:
Navigate to the SerenDB Console.
Select a project.
Select Branches from the sidebar.
Select the branch where you want to view databases.
Select the Roles & Databases tab.
Delete a database
Deleting a database is a permanent action. All database objects belonging to the database such as schemas, tables, and roles are also deleted.
To delete a database:
Navigate to the SerenDB Console.
Select a project.
Select Databases from the sidebar.
Select a branch to view the databases in the branch.
For the database you want to delete, click the delete icon.
In the confirmation dialog, click Delete.
Manage databases with the SerenDB CLI
The SerenDB CLI supports creating and deleting databases. For instructions, see SerenDB CLI commands — databases.
Manage databases with the SerenDB API
Database actions performed in the SerenDB Console can also be also performed using the SerenDB API. The following examples demonstrate how to create, view, update, and delete databases using the SerenDB API. For other database-related methods, refer to the SerenDB API reference.
In SerenDB, a database belongs to a branch, which means that when you create a database, it is created in a branch. Database-related requests are therefore performed using branch API methods.
The API examples that follow may not show all user-configurable request body attributes that are available to you. To view all attributes for a particular method, refer to the method's request body schema in the [SerenDB API reference](https://api-docs.serendb.com/reference/getting-started-with-neon-api).
The jq option specified in each example is an optional third-party tool that formats the JSON response, making it easier to read. For information about this utility, see jq.
Prerequisites
A SerenDB API request requires an API key. For information about obtaining an API key, see Create an API key. In the cURL examples below, $NEON_API_KEY is specified in place of an actual API key, which you must provide when making a SerenDB API request.
### Create a database with the API
The following SerenDB API method creates a database. To view the API documentation for this method, refer to the SerenDB API reference.
The role specified by owner_name is the owner of that database.
POST /projects/{project_id}/branches/{branch_id}/databasesSome names are not permitted for databases. See [Reserved database names](#reserved-database-names).
The API method appears as follows when specified in a cURL command. The project_id and branch_id are required parameters, and a database name and owner are required attributes.
curl 'https://console.serendb.com/api/v2/projects/dry-heart-13671059/branches/br-morning-meadow-afu2s1jl/databases' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $NEON_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"database": {
"name": "mydb",
"owner_name": "casey"
}
}' | jqList databases with the API
The following SerenDB API method lists databases for the specified branch. To view the API documentation for this method, refer to the SerenDB API reference.
GET /projects/{project_id}/branches/{branch_id}/databasesThe API method appears as follows when specified in a cURL command. The project_id and branch_id are required parameters.
curl 'https://console.serendb.com/api/v2/projects/hidden-cell-763301/branches/br-blue-tooth-671580/databases' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $NEON_API_KEY" | jqUpdate a database with the API
The following SerenDB API method updates the specified database. To view the API documentation for this method, refer to the SerenDB API reference.
PATCH /projects/{project_id}/branches/{branch_id}/databases/{database_name}The API method appears as follows when specified in a cURL command. The project_id and branch_id are required parameters. This example updates the database name value to database1.
curl -X PATCH 'https://console.serendb.com/api/v2/projects/dry-heart-13671059/branches/br-morning-meadow-afu2s1jl/databases/mydb' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $NEON_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"database": {
"name": "database1"
}
}' | jqDelete a database with the API
The following SerenDB API method deletes the specified database. To view the API documentation for this method, refer to the SerenDB API reference.
DELETE /projects/{project_id}/branches/{branch_id}/databases/{database_name}The API method appears as follows when specified in a cURL command. The project_id, branch_id, and database_name are required parameters.
curl -X 'DELETE' \
'https://console.serendb.com/api/v2/projects/dry-heart-13671059/branches/br-morning-meadow-afu2s1jl/databases/database1' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $NEON_API_KEY" | jqManage databases with SQL
You can create and manage databases in SerenDB with SQL, as you can with any standalone Postgres installation. To create a database, issue a CREATE DATABASE statement from a client such as psql or from the SerenDB SQL Editor.
CREATE DATABASE testdb;Most standard Postgres CREATE DATABASE parameters are supported with the exception of TABLESPACE. This parameter requires access to the local file system, which is not permitted in SerenDB.
The role that creates a database is the owner of the database.
As of Postgres 15, only a database owner has the `CREATE` privilege on a database's `public` schema. For other users, the `CREATE` privilege on the `public` schema must be granted explicitly via a `GRANT CREATE ON SCHEMA public TO ;` statement. For more information, see [Public schema privileges](/docs/manage/database-access#public-schema-privileges).
For more information about database object privileges in Postgres, see Privileges.
Reserved database names
The following names are reserved and cannot be given to a database:
postgrestemplate0template1
Last updated