↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

pg_restore

pg_restore — 从由 pg_dump 创建的归档文件中恢复 Postgres 数据库

大纲

pg_restore [ -a ] [ -c ] [ -C ] [ -d dbname ] [ -f archive-file ] [ -F format ] [ -i index ] [ -l ] [ -L contents-file ] [[ -N ] | [ -o ] | [ -r ]] [ -O ] [ -P function-name ] [ -R ] [ -s ] [ -S ] [ -t table ] [ -T trigger ] [ -v ] [ -x ] [ -h host ] [ -p port ] [ -u ] [ archive-file ]

描述

pg_restore 是一个用于恢复由 pg_dump 以某种非纯文本格式转储的 Postgres 数据库的工具。

归档文件是 7.1 版新增的,它们包含足够的信息供 pg_restore 重建数据库,而且还允许 pg_restore 有选择地恢复其中的内容,甚至在恢复前重新排列各项的顺序。归档文件被设计为可跨体系结构移植。pg_dump 会产生重新生成所有用户定义类型、函数、表、索引、聚集和操作符所需的查询。此外,所有数据都会被复制出来(对脚本而言是文本格式),以便可以方便地再次复制回去。

pg_restore 读取归档文件,并根据命令参数按所需顺序输出相应的 SQL。显然,它无法恢复转储文件中不存在的信息;因此,如果转储是使用 “将数据转储为 INSERT 命令” 选项生成的,pg_restore 就不能使用 COPY 语句装载数据。

最灵活的输出文件格式是“自定义”格式(-Fc)。它允许选择和重排所有归档项,并且默认是压缩的。tar 格式(-Ft)不压缩,而且在装载时无法重排数据,但除此之外相当灵活。

要重新排列各项,首先需要转储归档的内容:

$ pg_restore archive.file -l > archive.list

这个文件由一个头部和每个项各占一行的内容组成,例如:

;
; Archive created at Fri Jul 28 22:28:36 2000
;     dbname: birds
;     TOC Entries: 74
;     Compression: 0
;     Dump Version: 1.4-0
;     Format: CUSTOM
;
;
; Selected TOC Entries:
;
2; 145344 TABLE species postgres
3; 145344 ACL species
4; 145359 TABLE nt_header postgres
5; 145359 ACL nt_header
6; 145402 TABLE species_records postgres
7; 145402 ACL species_records
8; 145416 TABLE ss_old postgres
9; 145416 ACL ss_old
10; 145433 TABLE map_resolutions postgres
11; 145433 ACL map_resolutions
12; 145443 TABLE hs_old postgres
13; 145443 ACL hs_old

分号是注释定界符,而行首的数字表示分配给每个项的内部归档 ID。

文件中的行可以被注释掉、删除并重新排序。例如:

10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres

可以作为 pg_restore 的输入,这样它就只会按该顺序恢复项 10 和 6。

$ pg_restore archive.file -L archive.list

选项

pg_restore 接受下列命令行参数。(长选项形式只在某些平台上可用。)

archive-name

指定要恢复的归档文件的位置。如果没有指定,而且也没有指定 -f 选项,则使用标准输入。

-a
--data-only

只恢复数据,不恢复模式(定义)。

-c
--clean

在创建之前清理(删除)模式。

-C
--create

包含创建模式的 SQL。

-d dbname
--dbname=dbname

连接到数据库 dbname 并直接恢复到该数据库中。BLOB 只能通过直接数据库连接来恢复。

-f filename
--file=filename

指定生成脚本的输出文件。(与 -l 选项一起使用。)默认为标准输出。

-F format
--format=format

指定归档的格式。没有必要指定格式,因为 pg_restore 会自动确定格式。如果指定,它可以是下列之一:

t

归档是一个 tar 归档。使用这种归档格式允许在恢复数据库时重排和/或排除模式元素,也可以限制恢复时重新装载哪些数据。

c

归档是 pg_dump 的自定义格式。这是最灵活的格式,因为它既允许重排数据装载也允许重排模式元素。这种格式默认还是压缩的。

-i index
--index=index

仅恢复指定名称 index 的定义。

-l
--list

列出归档的内容。此命令的输出可与 -L 选项一起使用,以限制并重排被恢复的项。

-L list-file
--use-list=list-file

仅恢复 list-file 中列出的元素,并按它们在文件中出现的顺序进行恢复。可以移动行,也可以通过在行首放置 ';' 将其注释掉。

-N
--orig-order

按原始转储顺序恢复各项。默认情况下,pg_dump 会按对 pg_dump 方便的顺序转储各项,然后按修改过的 OID 顺序保存归档。此选项覆盖 OID 排序。

-o
--oid-order

按 OID 顺序恢复各项。默认情况下,pg_dump 会按对 pg_dump 方便的顺序转储各项,然后按修改过的 OID 顺序保存归档。此选项强制严格的 OID 排序。

-O
--no-owner

阻止任何恢复原始对象所有权的尝试。对象将属于用来连接数据库的用户名。

-P function-name
--function=function-name

指定要恢复的过程或函数。

-r
--rearrange

按修改过的 OID 顺序恢复各项。默认情况下,pg_dump 会按对 pg_dump 方便的顺序转储各项,然后按修改过的 OID 顺序保存归档。大多数对象会按 OID 顺序恢复,但有些东西(如规则和索引)会在过程结束时恢复,而不管它们的 OID 如何。此选项是默认值。

-R
--no-reconnect

禁止 pg_restore 发出任何

\connect

语句,或在直接连接时重新连接数据库。

-s
--schema-only

恢复模式(定义),不恢复数据。序列值会被重置。

-S username
--superuser=username

指定在禁用触发器和/或设置模式元素所有权时要使用的超级用户用户名。默认情况下, pg_restore 会在当前用户是超级用户时使用当前用户名。

-t table
--table=table

只恢复 table 的模式/数据。

-T trigger
--trigger=trigger

仅恢复 trigger 的定义。

-v
--verbose

指定详细模式。

-x
--no-acl

阻止恢复 ACL(grant/revoke 命令)。

pg_restore 还接受以下用于连接参数的命令行参数:

-h host
--host=host

指定 postmaster 运行所在机器的主机名。如果 host 以斜杠开头,则它被用作 Unix 域套接字目录。

-p port
--port=port

指定 postmaster 监听连接所使用的 Internet TCP/IP 端口或本地 Unix 域套接字文件扩展名。端口号默认为 5432,或 PGPORT 环境变量的值(如果已设置)。

-u

使用口令认证。提示输入用户名和口令。

诊断

Connection to database 'template1' failed.
connectDBStart() -- connect() failed: No such file or directory
        Is the postmaster running locally
        and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?

pg_restore 无法连接到指定主机和端口上的 postmaster 进程。如果你看到这条消息,请确保 postmaster 运行在正确的主机上,并且你指定了正确的端口。如果你的站点使用认证系统,请确保你已获得所需的认证凭据。

注意

当使用 -d 选项指定直接数据库连接时, pg_restore 会在内部执行 SQL 语句。如果运行 pg_restore 时遇到问题,请确保你能够使用例如 psql 从该数据库中查询信息。

注解

pg_restore 的局限性详述如下。

  • 当把数据恢复到一个表中时, pg_restore 会在插入数据前发出查询禁用用户表上的触发器,然后在数据插入后再发出查询重新启用它们。如果恢复在中途停止, 系统目录可能会处于错误状态。

  • pg_restore 不会为单个表恢复 BLOB。如果归档中包含 BLOB,那么所有 BLOB 都将被恢复。

关于 pg_dump 的局限性的细节请参见 pg_dump 文档。

示例

要转储一个数据库:

$ pg_dump mydb > db.out

要重新装载这个数据库:

$ psql -d database -f db.out

要把一个名为 mydb 的包含 BLOB 的数据库转储到一个 tar 文件中:

$ pg_dump -Ft -b mydb > db.tar

要把这个数据库(连同 BLOB)重新装载到一个已存在的名为 newdb 的数据库中:

$ pg_restore -d newdb db.tar

参见

pg_dump , pg_dumpall, psql, PostgreSQL 管理员指南

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。