仅备份一个架构并将其还原到另一台服务器上

use*_*422 32 schema postgresql backup postgresql-9.1

我有一个名为“A”的数据库,它有两个模式“B”和“C”。

我想在不同的服务器上备份和恢复架构“B”(包括数据)。不知道如何做到这一点,因为我是 Postgres 的新手。

我是否必须在名为“A”的新服务器上创建一个新数据库,然后在其上恢复架构“B”?

请帮助执行必要的命令。

在 Ubuntu 12.04 上运行的 PostgreSQL 9.1

Pet*_*aut 29

您可以使用-npg_dump 选项选择要转储的模式。创建模式 B 的转储:

pg_dump ...other...options... -Fc -n B >dump.dmp
Run Code Online (Sandbox Code Playgroud)

恢复转储文件:

pg_restore -d somedb dump.dmp
Run Code Online (Sandbox Code Playgroud)

目标数据库不必与原始数据库同名。

请注意,如果架构 B 依赖于架构 C,您将遇到问题。然后您将无法单独恢复它。

另请注意,转储一个架构时,您不会转储 blob(LOB 类型)。使用-b选项转储 blob。随着-b所有的斑点被添加,不只是一个单一的架构。


小智 13

可以添加参数-n [schema name] 这个参数的注释是这样说的:

-n schema
--schema=schema
Run Code Online (Sandbox Code Playgroud)

仅转储与模式匹配的模式;这将选择模式本身及其包含的所有对象。未指定此选项时,将转储目标数据库中的所有非系统模式。


Lua*_*ynh 5

  • 您可以使用 pg_dump 工具(参见pg_dump doc)和 pg_restore (pg_restore doc
  • 您不需要在新服务器上创建新的数据库名称“A”。

*基本示例:

我在窗口中创建“dump.bat”和“restore.bat”文件来转储/恢复

1/ 备份:

"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --format plain --encoding UTF8 --schema-only  --file "dump_resul.sql" --schema "name_schema_B" "name_database_A" 
Run Code Online (Sandbox Code Playgroud)

结果:

-- PostgreSQL database dump

-- Dumped from database version 9.1.4
-- Dumped by pg_dump version 9.1.4

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

CREATE TABLE abtb_temp (
    id bigint NOT NULL,
    app_code character varying(100)
); ....
Run Code Online (Sandbox Code Playgroud)

*注意:一些重要的选项:

--data-only, --format=format (ex: format=tar -> if you have a big database), --schema-only, --table=table (ex: --table=schema_name.table_name) ...
Run Code Online (Sandbox Code Playgroud)

2/ 恢复: "C:\Program Files\PostgreSQL\9.1\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "any_database" --no-password --no-owner --no-privileges --schema name_schema_B --verbose "C:\dump_resul.sql"(**)

(**) 实际上,如果您的格式文件是 *.sql,您可以使用 pgAdmin(或 psql)来恢复 . 您应该使用 pg_restore 来恢复文件.tar ( .bakup ...)