# Databases

## What is a Database?

A database is a container for a set of schema: [tables](https://docs.doltgres.com/concepts/sql/table), [views](https://docs.doltgres.com/concepts/sql/views), [triggers](https://docs.doltgres.com/concepts/sql/triggers), [procedures](https://docs.doltgres.com/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](https://docs.doltgres.com/concepts/rdbms) allows you to access multiple databases from a single running [server](https://docs.doltgres.com/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.

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](https://docs.doltgres.com/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.
