Postgres: Best way to move data from public schema of one DB to new schema of another DB

前端 未结 2 687
一向
一向 2021-02-07 20:31

I am new to Postgres and just discovered that I cannot access data of different databases in one SQL query. And also learned the concept of schema in Postgres.

Now, I ha

相关标签:
2条回答
  • 2021-02-07 21:11

    Export "public" from db2 (skipping grants and ownership):

    pg_dump -xO -n public db2 > db2.sql
    

    The exported file will set up the search path (somewhere near the top):

    SET search_path = public, pg_catalog;
    

    change it to:

    CREATE SCHEMA IF NOT EXISTS new_schema;
    SET search_path = new_schema, pg_catalog;
    

    Import to db1 as usual:

    psql db1 < db2.sql
    

    You'll probably want to move everything from public to a new schema in db1, first.

    If the schema is already set up in db1, you can do the transfer in one go:

    pg_dump -xO -n public db2 | sed 's/search_path = public/search_path = new_schema/' | psql db1
    

    Wouldn't recommend that without a lot of testing, of course.

    0 讨论(0)
  • 2021-02-07 21:18

    The simplest way to do that is to rename schemas. However you must be sure you are a sole user of db1 database.

    First, hide your schema public in db1:

    alter schema public rename to original_public;
    create schema public;
    

    Next, do the backup and restore:

    $ pg_dump --format custom --file "my_backup" --schema "public" "db2"
    $ pg_restore --dbname "db1" "my_backup"
    

    Finally, recreate appropriate schema names:

    alter schema public rename to my_schema;
    alter schema original_public rename to public;
    

    Another option is to use dblink. It enables accessing data of different databases.

    0 讨论(0)
提交回复
热议问题