PostgreSql pg_restore 用法

Posted 脑子进水养啥鱼?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSql pg_restore 用法相关的知识,希望对你有一定的参考价值。

一、概述

pg_restore 是一个用来从 pg_dump 创建的非文本格式文件中恢复 PostgreSQL 数据库的工具。

二、语法

pg_restore [connection-option] [option] filename

connection-option 可选参数:

-h host 或 --host=host:连接地址。
-p port 或 --port=port:连接端口号。
-U username 或 --username=username:连接用户。
-w 或 --no-password:不输入密码,这个选项对于批处理任务和脚本有用。
-W 或 --password:强制输入密码,在某些情况下,值得键入-W来避免额外的连接尝试。
–role=rolename:-U指定用户权限不足以恢复数据时,可设置其他角色权限来协助恢复。

option 可选参数:

-a 或 --data-only:只恢复数据,不恢复数据定义,大对象和序列值也会被恢复。
-c 或 --clean:在重新创建数据库对象之前清除它们。
-C 或 --create:在恢复一个数据库之前先创建它。如果还指定了–clean,在连接到目标数据库之前重建它。
-d dbname 或 --dbname=dbname:连接到数据库dbname并且直接恢复到该数据库中。
-e 或 --exit-on-error:恢复期间碰到错误就退出,默认恢复结束时显示一个错误计数。
-f filename 或 --file=filename:为生成的脚本指定输出文件,或在与-l选项一起使用时为列表指定输出文件
-F format 或 --format=format:指定归档的格式。
-I index 或 --index=index:只恢复提及的索引的定义,可以通过写多个-I开关指定多个索引。
-j number-of-jobs 或 --jobs=number-of-jobs:使用并发任务运行 pg_restore,这个选项只支持自定义和目录归档格式,输入必须是一个常规文件或目录。
-l 或 --list:列出归档的内容的表格。这个操作的输出能被用作-L选项的输入。注意如果把-n或-t这样的过滤开关与-l一起使用,它们将会限制列出的项。
-L list-file 或 --use-list=list-file:只恢复在list-file中列出的归档元素,并且按照它们出现在该文件中的顺序进行恢复。注意如果把-n或-t这样的过滤开关与-L一起使用,它们将会进一步限制要恢复的项。
-n shcema 或 --schema=schema:只恢复在被提及的模式中的对象。可以用多个-n开关来指定多个模式。这可以与-t选项组合在一起只恢复一个指定的表。
-N schema 或 --exclude-schema=schema:不恢复所提及方案中的对象。可以用多个-N开关指定多个要被排除的方案,优先级高于 -n。
-O 或 --no-owner:恢复时排除原库 owner。
-P function-name(argtype [, …]) 或–function=function-name(argtype [, …]):只恢复被提及的函数,可以使用多个-P开关指定多个函数。
-s 或 --schema-only:只恢复数据定义,不恢复数据。
-S username 或 --superuser=username:指定在禁用触发器时要用的超级用户名。只有使用–disable-triggers时这个选项才相关。
-t table 或 --table=table:只恢复所提及的表,“table”包括视图、物化视图、序列和外部表。
-T trigger 或 --trigger=trigger:只恢复所提及的触发器,可以用多个-T开关指定多个触发器。
-v 或 --verbose:指定冗长模式。
-V 或 --version:打印该pg_restore的版本并退出。
-x 或 --no-privileges 或 --no-acl:阻止恢复访问特权(授予/收回命令)。
-1 或 --single-transaction:将恢复作为单一事务执行(即把发出的命令包裹在BEGIN/COMMIT中),这个选项隐含了–exit-on-error。
–disable-triggers:只有在执行一个只恢复数据的恢复时,这个选项才相关。它指示pg_restore在装载数据时执行命令临时禁用目标表上的触发器。目前,为–disable-triggers发出的命令必须以超级用户身份完成。因此你还应该用-S指定一个超级用户名,或者更好的方法是以一个PostgreSQL超级用户运行pg_restore。
–enable-row-security:只有在恢复具有行安全性的表的内容时,这个选项才相关。默认情况下,pg_restore将把row_security设置为 off 来确保所有数据都被恢复到表中。注意当前这个选项还要求转储处于INSERT格式,因为COPY FROM不支持行安全性。
–if-exists:使用条件命令(即增加一个IF EXISTS子句)删除数据库对象。只有指定了–clean时,这个选项才有效。
–no-comments:不输出恢复注释的命令。
–no-data-for-failed-tables:默认情况下,即便表的创建命令失败(例如因为表已经存在),表数据也会被恢复。通过这个选项,对这类表的数据会被跳过。只有当直接恢复到一个数据库中时这个选项才有效,在产生 SQL脚本输出时这个选项不会产生效果。
–no-publications:不输出恢复publication的命令。
–no-security-labels:不输出恢复安全标签的命令。
–no-subscriptions:不输出恢复subscription的命令。
–no-tablespaces:不输出命令选择表空间。通过这个选项,所有的对象都会被创建在恢复时的默认表空间中。
–section=sectionname:只恢复提及的小节。小节的名称可以是pre-data、data或者post-data。可以把这个选项指定多次来选择多个小节。默认值是恢复所有小节。 数据小节包含实际的表数据以及大对象定义。Post-data 项由索引定义、触发器、规则和除已验证的检查约束之外的约束构成。Pre-data 项由所有其他数据定义项构成。
–strict-names:要求每一个模式(-n/–schema)以及表(-t/–table)限定词匹配备份文件中至少一个模式/表。
–use-set-session-authorization:输出 SQL 标准的SET SESSION AUTHORIZATION命令取代ALTER OWNER命令来决定对象拥有权。这会让转储更加兼容标准,但是依赖于转储中对象的历史,可能无法正确恢复。

三、示例

--备份数据库
pg_dump -Fc -d test > test.dump

--删除数据库
dropdb test

--恢复到原数据库
pg_restore test.dump -d highgo -C

--恢复到其他数据库
pg_restore test.dump -d ddd

--dump二进制文件转为sql文本文件
pg_restore test.dump -C -f test.sql

--dump二进制文件转为列表文本
pg_restore -l test.dump > test.list

--编辑列表文本,排除恢复对象恢复(对应的对象行首加;即为排除该对象)
pg_restore -L test.list test.dump -C -d highgo

如排除表 sssss 恢复:
[highgo@dj ~]$ more test.list
;
; Archive created at 2022-02-23 17:31:42 CST
;     dbname: test
;     TOC Entries: 14
;     Compression: -1
;     Dump Version: 1.13-0
;     Format: CUSTOM
;     Integer: 4 bytes
;     Offset: 8 bytes
;     Dumped from database version: 10.6
;     Dumped by pg_dump version: 10.6
;
;
; Selected TOC Entries:
;
3713; 1262 16441 DATABASE - test highgo
2; 3079 13205 EXTENSION - oraftops
3714; 0 0 COMMENT - EXTENSION oraftops
7; 2615 2200 SCHEMA - public highgo
3715; 0 0 COMMENT - SCHEMA public highgo
1; 3079 13200 EXTENSION - plpgsql
3716; 0 0 COMMENT - EXTENSION plpgsql
3; 3079 13843 EXTENSION - alter_pg_func
3717; 0 0 COMMENT - EXTENSION alter_pg_func
;211; 1259 16442 TABLE public sssss highgo
;3707; 0 16442 TABLE DATA public sssss highgo

如何在没有 psql 和 pg_restore 的情况下恢复 PostgreSQL 数据库备份?

【中文标题】如何在没有 psql 和 pg_restore 的情况下恢复 PostgreSQL 数据库备份?【英文标题】:How to restore PostgreSQL database backup without psql and pg_restore? 【发布时间】:2015-05-15 09:42:38 【问题描述】:

我在运行 yocto(定制的 linux)的嵌入式设备上使用 postgresql。包含 postgresql 的包不提供 psql 或 pg_restore。 /usr/bin 提供以下工具:

pg_basebackup 表示我能够创建备份。但是我应该如何在终端中恢复备份?使用 pg_restore 或 psql 这对我来说不是问题。

请注意:我想使用在我的 windows/linux 计算机上创建的备份在嵌入式设备上创建初始数据库。

【问题讨论】:

psqlpg_restore客户端 端工具。您不需要在服务器上使用它们来恢复备份。如果您可以从桌面连接到设备上运行的 Postgres 服务器,则可以从 Windows/Linux 计算机恢复转储。 pg_basebackup 主要用于引导第二个节点进行复制。没有等效的“恢复工具,因为它只是创建数据目录的副本。 可以通过网络恢复备份。但是,我想在第一次启动时初始化嵌入式系统,并提供所有必要的文件(例如当前的数据库备份)。因此,如果系统上有可用的备份文件,我需要一些建议如何直接在服务器上恢复备份。 可以通过网络初始化数据库,然后在设备上关闭Postgres,复制数据目录 这不是选项,因为我不想每次都手动执行此操作。我只是想为服务器映像(当​​前为 *.sql)提供最新的备份文件并在第一次系统启动时恢复它们......从命令行运行简单的 *.sql-scripts 已经足够了,但是如何没有 psql 我能做到吗? 也许你可以从你下载服务器软件的地方安装一个包含psql的“postgres-client”包? 【参考方案1】:

使用命令创建数据库备份:

pg_basebackup -h host_ip -D pg_backup  -U USER

要恢复,只需将数据文件夹更改为 pg_backup。现在启动 psql 服务器。

【讨论】:

以上是关于PostgreSql pg_restore 用法的主要内容,如果未能解决你的问题,请参考以下文章

pg_restore - 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库。

postgresql数据库的数据导出

postgresql数据库恢复出错,急急急!!!!

pg_restore 重复键和无效命令错误

pg_restore 没有禁用触发器

pg_dump实例详解(备份postgresql和greenplum数据库)