Search code examples
postgresql

Creating a copy of a database in PostgreSQL


What's the correct way to copy entire database (its structure and data) to a new one in pgAdmin?


Solution

  • Postgres allows the use of any existing database on the server as a template when creating a new database. I'm not sure whether pgAdmin gives you the option on the create database dialog but you should be able to execute the following in a query window if it doesn't:

    CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
    

    Still, you may get:

    ERROR:  source database "originaldb" is being accessed by other users
    

    To disconnect all other users from the database, you can use this query:

    SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
    WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();