---
title: Backups with pg_dump
subtitle: Learn how to create a backup of your Neon database using pg_dump
enableTableOfContents: true
updatedOn: '2025-06-30T11:30:21.920Z'
---
This topic describes how to create a backup of your Neon database using the Postgres `pg_dump` utility and how to restore a backup using `pg_restore`.
Avoid using `pg_dump` over a [pooled connection string](/docs/reference/glossary#pooled-connection-string) (see PgBouncer issues [452](https://github.com/pgbouncer/pgbouncer/issues/452) & [976](https://github.com/pgbouncer/pgbouncer/issues/976) for details). Use an [unpooled connection string](/docs/reference/glossary#unpooled-connection-string) instead.
## Prerequisites
- Make sure `pg_dump` and `pg_restore` are installed. You can verify by running `pg_dump -V`.
- We recommend using the latest versions of `pg_dump` and `pg_restore`, and ensuring that the client version matches your Neon project's Postgres version.
## Install `pg_dump` and `pg_restore`
If you don't have the `pg_dump` and `pg_restore` utilities installed locally, you'll need to install them on your preferred platform.
1. Install PostgreSQL using the official installer from https://www.postgresql.org/download/windows/.
2. `pg_dump` and `pg_restore` are installed by default and can be found in the PostgreSQL `bin` directory.
1. Install PostgreSQL using Homebrew with the command: brew install postgresql.
2. `pg_dump` and `pg_restore` come with the installation and are available in your `PATH`.
1. On Ubuntu/Debian, install the PostgreSQL client tools with: `sudo apt-get install postgresql-client`.
2. `pg_dump` and `pg_restore` will be available after installation.
1. Pull the official PostgreSQL Docker image: `docker pull postgres`.
2. Run the container with: `docker run --name postgres -e POSTGRES_PASSWORD=yourpassword -d -p 5432:5432 postgres`.
3. Verify `pg_dump` is available by running: `docker run --rm postgres pg_dump --version`.
## Creating a backup with `pg_dump`
Following this procedure will create a database backup locally, where you're running the `pg_dump` command.
1. Retrieve the connection string for your Neon database by navigating to your Neon **Project Dashboard** and clicking the **Connect** button to open the **Connect to your database** modal.
2. Deselect the **Connection pooling** option. You need a direct connection string, not a pooled one.
Your connection string should look something like this:
```bash shouldWrap
postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require
```
3. Create a backup of your Neon database by running the following `pg_dump` command with your Neon database connection string.
```bash shouldWrap
pg_dump -Fc -v -d "" -f
```
After adding your Neon database connection string and a dump file name, your command will look something like this:
```bash shouldWrap
pg_dump -Fc -v -d "postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require" -f mydatabase.bak
```
The `pg_dump` command above includes these arguments:
- `-Fc`: Sends the output to a custom-format archive suitable for input into `pg_restore`.
- `-v`: Runs `pg_dump` in verbose mode, allowing you to monitor what happens during the dump operation.
- `-d`: Specifies the [connection string](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING) for your Neon database.
- `-f `: The dump file name. It can be any name you choose (`mydumpfile.bak`, for example).
For more command options, see [Advanced pg_dump and pg_restore options](#advanced-pgdump-and-pgrestore-options).
## Restoring a backup with `pg_restore`
This procedure shows how to restore a database using the `pg_restore` utility from a backup file created using `pg_dump`, as described above.
1. Create a new Neon project.
2. Create a database with the same name as the one you backed up. The `pg_dump` instructions above created a backup of a database named `neondb`. Your database name is likely different.
3. Retrieve the connection string for your Neon database:
Go to your Neon project and click the **Connect** button to open the **Connect to your database** modal.
Deselect the **Connection pooling** option. You need a direct connection string, not a pooled one.
Your connection string should look something like this:
```bash shouldWrap
postgresql://alex:AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require
```
4. Restore your data to the target database in Neon with `pg_restore`.
```bash shouldWrap
pg_restore -v -d ""
```
After adding your Neon database connection string and the dump file name, your command will look something like this:
```bash shouldWrap
pg_restore -v -d "postgresql://alex:AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require" mydatabase.bak
```
The example above includes these arguments:
- `-v`: Runs `pg_restore` in verbose mode, allowing you to monitor what happens during the restore operation.
- `-d`: Specifies the Neon database to connect to. The value is a Neon database connection string. See [Before you begin](#before-you-begin).
- `` is the name of the dump file you created with `pg_dump`.
For more command options, see [Advanced pg_dump and pg_restore options](#advanced-pgdump-and-pgrestore-options).
## `pg_dump` and `pg_restore` example
The following example shows how data is dumped from source database named `neondb` in one Neon project and restored to a `neondb` database in another Neon project using the commands described in the previous sections. (A database named `neondb` was created in the Neon project prior to running the restore operation.)
Before performing this procedure:
- A new Neon project was created for the destination database, and a database with the same name as the source database was created (`neondb`)
- Connection strings for the source and destination databases were collected:
- source: `postgresql://neondb_owner:npg_AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require`
- destination: `postgresql://neondb_owner:npg_AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require`
```bash shouldWrap
~$ cd mydump
~/mydump$ pg_dump -Fc -v -d "postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require" -f mydatabase.bak
~/mydump$ ls
mydatabase.bak
~/mydump$ pg_restore -v -d "postgresql://alex:AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require&channel_binding=require" mydatabase.bak
```