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
.
important
Avoid using pg_dump
over a pooled connection string (see PgBouncer issues 452 & 976 for details). Use an unpooled connection string instead.
Prerequisites
- Make sure
pg_dump
andpg_restore
are installed. You can verify by runningpg_dump -V
. - We recommend using the latest versions of
pg_dump
andpg_restore
, and ensuring that the client version matches your Neon project's Postgres version (14–17).
pg_dump
and pg_restore
Install If you don't have the pg_dump
and pg_restore
utilities installed locally, you'll need to install them on your preferred platform.
- Install PostgreSQL using the official installer from https://www.postgresql.org/download/windows/.
pg_dump
andpg_restore
are installed by default and can be found in the PostgreSQLbin
directory.
pg_dump
Creating a backup with Following this procedure will create a database backup locally, where you're running the pg_dump
command.
-
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.
-
Deselect the Connection pooling option. You need a direct connection string, not a pooled one.
Your connection string should look something like this:
postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require
-
Create a backup of your Neon database by running the following
pg_dump
command with your Neon database connection string.pg_dump -Fc -v -d "<neon_database_connection_string>" -f <dump_file_name>
After adding your Neon database connection string and a dump file name, your command will look something like this:
pg_dump -Fc -v -d "postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require" -f mydatabase.bak
The
pg_dump
command above includes these arguments:-Fc
: Sends the output to a custom-format archive suitable for input intopg_restore
.-v
: Runspg_dump
in verbose mode, allowing you to monitor what happens during the dump operation.-d
: Specifies the connection string for your Neon database.-f <dump_file_name>
: 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.
pg_restore
Restoring a backup with This procedure shows how to restore a database using the pg_restore
utility from a backup file created using pg_dump
, as described above.
-
Create a new Neon project.
-
Create a database with the same name as the one you backed up. The
pg_dump
instructions above created a backup of a database namedneondb
. Your database name is likely different. -
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:
postgresql://alex:AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require
-
Restore your data to the target database in Neon with
pg_restore
.pg_restore -v -d "<neon_database_connection_string>" <dump_file_name>
After adding your Neon database connection string and the dump file name, your command will look something like this:
pg_restore -v -d "postgresql://alex:AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require" mydatabase.bak
The example above includes these arguments:
-v
: Runspg_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.<dump_file_name>
is the name of the dump file you created withpg_dump
.
For more command options, see Advanced pg_dump and pg_restore 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
- destination:
postgresql://neondb_owner:npg_AbC123dEf@ep-dry-morning-a8vn5za2.us-east-2.aws.neon.tech/neondb?sslmode=require
- source:
~$ cd mydump
~/mydump$ pg_dump -Fc -v -d "postgresql://alex:AbC123dEf@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=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" mydatabase.bak