# Databases

## What is a Database?

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.doltgres.com/concepts/sql/databases.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
