Files
2026-07-13 12:32:25 +08:00

129 lines
5.1 KiB
Markdown

# Doltgres is Dolt for Postgres!
From the creators of [Dolt](https://www.doltdb.com), the world's first version-controlled SQL
database, comes [Doltgres](https://www.doltgres.com), the Postgres-flavored version of Dolt. It's a
SQL database that you can branch and merge, fork and clone, push and pull, just like a Git
repository. Connect to your Doltgres server just like any Postgres database to read or modify schema
and data. Version control functionality is exposed in SQL via system tables, functions, and
procedures.
Git versions file, Doltgres versions tables. It's like Git and Postgres had a baby.
[Join us on Discord](https://discord.com/invite/RFwfYpu) to say hi and
ask questions, or [check out our roadmap](https://dolthub.com/docs/other/roadmap)
to see what we're building next.
## What's it for?
Lots of things! Doltgres is a generally useful tool with countless applications. But if you want
some ideas, [here's how people are using it so
far](https://www.dolthub.com/blog/2022-07-11-dolt-case-studies/).
# How to use this image
This image is for the Doltgres server and is similar to the Postgres Docker image. Running this
image without any arguments is equivalent to running the `doltgres` command inside a Docker
container.
To see all supported options for `doltgres`, you can run the image with `--help` flag.
```shell
$ docker run dolthub/doltgresql:latest --help
```
## Building the image
To build this image, use the `Dockerfile` in the root of the [Doltgres
repository](https://github.com/dolthub/doltgresql/) with an optional build argument:
```shell
# Build the latest Doltgres version (automatically fetches the latest release)
$ docker build -t doltgres:latest .
# Build the latest Doltgres version (fetches the latest release)
$ docker build --build-arg DOLTGRES_VERSION=latest -t doltgres:latest .
# Build with a specific Doltgres version
$ docker build --build-arg DOLTGRES_VERSION=0.55.1 -t doltgres:0.55.1 .
# Build from local source code
$ docker build --build-arg DOLTGRES_VERSION=source -t doltgres:source .
```
## Connect to the server in the container from the host system
To connect to a server running in a container from the host system, we need to map a port on the
host system to the port our server is running on in the container.
```bash
$ docker run -p 5432:5432 dolthub/doltgresql:latest
```
*Note*: if you have Postgres installed on this machine already, port `5432` will be in use. Either
choose a different port to map or shut down Postgres.
Now connect with `psql` or another Postgres-compatible client.
```bash
$ PGPASSWORD=password psql --host 127.0.0.1 -U postgres
```
## Define configuration for the server
You can specify server configuration by providing your own `config.yaml` for the server to use as a
mounted volume. The image looks for a `config.yaml` file in the mounted directory
`/etc/doltgres/servercfg.d`. Place your desired `config.yaml` directory in a local file, then
provide it to `docker run` with the `-v` argument like this:
```shell
$ docker run -v ./doltgres_cfg:/etc/doltgres/servercfg.d -p 5432:5432 dolthub/doltgresql:latest
```
The data directory in the container is `/var/lib/doltgresql/`. To change this, provide the `PGDATA`
or `DOLTGRES_DATA` environment variable to `docker run`. This directory can also be a mounted
directory on the local machine.
```shell
$ docker run -e PGDATA=/path/to/doltgres/data -p 5432:5432 dolthub/doltgresql:latest
```
## Specifying a username and password
By default, the server creates a super-user named `postgres` with the password `password`. To change
this, provide the `DOLTGRES_USER` and `DOLTGRES_PASSWORD` environment variables to the `docker run`
command.
```shell
$ docker run -e DOLTGRES_USER=myuser -e DOLTGRES_PASSWORD=mypass -p 5432:5432 dolthub/doltgresql:latest
```
For convenience, `POSTGRES_USER` and `POSTGRES_PASSWORD` are accepted as aliases for these variables.
To create additional users, connect to the running database and issue `CREATE ROLE` and `GRANT`
statements as the super-user.
## Initialization
By default, the Doltgres server is initialized with a single empty database with the same name as
the system user (`postgres` by default). You can add additional data or execute arbitrary SQL setup
by including initialization scripts in the mounted volume
`/docker-entrypoint-initdb.d/`. Initialization scripts must have the `.sql` file extension and
contain statements separated by semicolons. They can be optionally compressed as `.bz2`, `.gz`,
`.xz`, or `.zst` files with the appropriate extension suffix, e.g. `init.sql.gz`.
Specify an initialization script directory as a volume with `docker run`:
```shell
$ docker run -v ./init_scripts:/docker-entrypoint-initdb.d/ -p 5432:5432 dolthub/doltgresql:latest
```
## Environment Variables
The Doltgres image supports the following environment variables:
- `DOLTGRES_USER`: The name of the super-user (default: `postgres`). `POSTGRES_USER` is an alias.
- `DOLTGRES_PASSWORD`: The password for the super-user (default: `password`). `POSTGRES_PASSWORD` is
an alias.
- `DOLTGRES_DATA`: Specifies a path in the container to store database data, created if it doesn't
exist (default: `/var/lib/doltgresql/`). `PGDATA` is an alias.