---
title: Databases
---


## What is a Database?

A database is a container for a set of schema: [tables](/concepts/sql/table), [views](/concepts/sql/views),
[triggers](/concepts/sql/triggers), [procedures](/concepts/sql/procedures), etc. In relational databases, queries
within a database are optimized, while queries across multiple databases are not.

A relational database management system or [RDBMS](/concepts/rdbms/) allows you to access multiple
databases from a single running [server](/concepts/rdbms/server). Confusingly, "database" is also
shorthand for RDBMS. Phrases like "Connect to this database" or "We run our database on AWS" refer
to RDBMS, not the SQL concept of a schema container.

## How to use Databases

Databases logically divide up your schema. Permissions can be applied to databases as a logical
entity.

When you connect a client to a running server, you can see the databases being served using the `\l`
command in the `psql` shell. To use a specific database, you issue a `\c <database>` statement. You
can also specify the database in the connection string to connect to a particular database.

## Difference between Postgres Databases and Doltgres Databases

In Doltgres, databases act like they do in Postgres.

## Interaction with Doltgres Version Control

In Doltgres, each database has its own commit graph. So, Doltgres version control is limited to a
single database. You cannot commit changes across multiple databases in a single commit. You cannot
share a log across multiple databases. Branches cannot be made across databases.

<!-- TODO: schema docs -->

Doltgres databases are the unit of sharing. Clone, push, pull, and fetch act on individual
databases. Thus, to create a copy of multiple databases, you must clone from multiple remotes.

The only SQL statement not versioned in Doltgres is `DROP DATABASE`. This statement deletes the
Doltgres database on disk, removing the database and all of its history. `DROP DATABASE` works this
way for SQL tool compatibility as it is common for import tools to issue a drop database to clear
all database state before an import. Doltgres implements [remotes](/concepts/git/remotes) like in Git so
you can maintain an offline copy for backup using clone, fetch, push, and pull. Maintaining a remote
copy allows you to restore in the case of an errant `DROP DATABASE` query.
