sd_dump
更新时间:2026-06-25
将一个database导出为单一的脚本文件或其他归档文件。
语法
Bash
1 sd_dump [connection-option ...] [dump_option ...] [dbname]
2
3 sd_dump -? | --help
4
5 sd_dump -V | --version
6 ```
7
8
9## 描述
10
11`sd_dump`是用于备份数据库的标准工具,在PalopgMPP数据库中也受支持。 它创建一个(非并行)转储文件。
12
13 对于PalopgMPP数据库的常规备份,最好使用PalopgMPP数据库备份工具以获得最佳性能。
14
15 如果要将数据迁移到另一个数据库供应商的系统或具有不同配置的另一个PalopgMPP数据库系统,可使用`sd_dump`。
16
17 要还原,须使用相应的sd_restore工具(如果转储文件为归档格式),或者可以使用诸如`ssql`之类的客户端程序(如果转储文件为纯文本格式)。
18
19
20 如果使用`sd_dump`备份PalopgMPP数据库数据库,请重视:对于大型数据库,转储操作可能需要很长时间(几个小时)。另外,必须确保有足够的磁盘空间来创建转储文件。
21
22
23
24 即使同时使用数据库,`sd_dump`也会进行一致的备份。 `sd_dump`不会阻止其他用户访问数据库(读或写)。
25
26 当与一种存档文件格式一起使用并与`sd_restore`结合使用时,`sd_dump`提供了一种灵活的归档和传输机制。`sd_dump`可用于备份整个数据库,然后` sd_restore `可用于检查存档和/或选择要还原数据库的哪些部分。最灵活的输出文件格式是自定义格式(`-Fc`)和目录格式(`-Fd`)。它们允许对所有已归档项目进行选择和重新排序,支持并行还原,并且默认情况下已压缩。目录格式是唯一支持并行转储的格式。
27
28
29
30选项
31: 该命令选项说明见下
32
33 dbname
34 : 指定要转储的数据库的名称。 如果未指定,则使用环境变量`SDDATABASE`。 如果未设置,则使用为连接指定的用户名。
35
36
37 以下选项均为转储选项:
38
39 \-a \| --data-only
40 : 仅转储数据,而不转储模式(数据定义)。表数据和序列值将转储。
41
42 此选项与`--section=data`相似。
43
44 \-b \| --blobs
45 : 在转储中包括大对象。 这是默认行为,除非指定了`--schema`,`--table`或`--schema-only`。
46
47 `-b`开关仅用于在选择性转储的时候添加大对象。请注意,blob被视为数据,因此,当使用`--data-only`时将包括这些blob,但在使用`--schema-only`时则不包括。
48
49 \-B \| --no-blobs
50 : 在转储中不包括大对象。
51
52 \-c \| --clean
53 : 在输出用于创建数据库对象的命令之前,将命令添加到文本输出文件中以清理(删除)数据库对象。(如果目标数据库中不存在任何对象,则恢复可能会生成一些无害的错误消息。)
54
55 请注意,在转储操作开始之前不会删除对象,但是会将`DROP`命令添加到DDL转储输出文件中,以便在使用这些文件时要还原文件,要先执行`DROP`命令,再执行`CREATE`命令。此选项仅对纯文本格式有意义。 对于归档格式,可以在调用`sd_restore`时指定该选项。
56
57 \-C \| --create
58 : 从命令开始输出,以创建数据库本身并重新连接到创建的数据库。(使用这种形式的脚本,在运行脚本之前连接到目标安装中的哪个数据库都没有关系。)如果还指定了`--clean`,则脚本会删除并在重新连接目标数据库之前重新创建它。 此选项仅对纯文本格式有意义。对于归档格式,可以在调用`sd_restore`时指定该选项。
59
60 \-E `encoding` \| --encoding=`encoding`
61 : 以指定的字符集编码创建转储。 默认情况下,转储以数据库编码创建。(获得相同结果的另一种方法是将`SDCLIENTENCODING`环境变量设置为所需的转储编码。)
62
63 \-f `file` \| --file=`file`
64 : 将输出发送到指定文件。 对于基于文件的输出格式,可以省略此参数,在这种情况下,将使用标准输出。但是,必须为目录输出格式提供该格式,该格式指定目标目录而不是文件。在这种情况下,该目录是由`sd_dump`创建的,以前不能存在。
65
66 \-F `[p|c|d|t]` \| --format=`[plain|custom|directory|tar ] `
67 : 选择输出格式。格式可以是以下之一:
68
69 \-p \| plain
70 : 输出纯文本SQL脚本文件(默认)。
71
72 \-c \| custom
73 : 输出适合输入到`sd_restore`的自定义存档。与目录输出格式一起使用时,这是最灵活的输出格式,因为它允许在还原过程中手动选择和重新排序已归档的项目。默认情况下,此格式为压缩格式,并且还支持并行转储。
74
75 \-d \| directory
76 : 输出适合于输入`sd_restore`的目录格式档案。这将创建一个目录,其中包含要转储的每个表和blob的一个文件,以及一个所谓的目录文件,该表以`sd_restore`可以读取的机器可读格式描述了转储的对象。目录格式归档文件可以使用标准的Unix工具进行处理。例如,可以使用`gzip`工具压缩未压缩档案中的文件。 默认情况下压缩此格式。
77
78 \-t \| tar
79 : 输出适合输入到`sd_restore`的tar格式的存档。tar格式与目录格式兼容;提取tar格式的存档会生成有效的目录格式的存档。但是,tar格式不支持压缩。 同样,在使用tar格式时,在还原过程中不能更改表数据项的相对顺序。
80
81
82 \-j `njobs` \| --jobs=`njobs`
83 : 通过同时转储`njobs`表来并行运行转储。 此选项减少了转储时间,但同时也增加了数据库服务器上的负载。只能将此选项与目录输出格式一起使用,因为这是多个进程可以同时写入其数据的唯一输出格式。
84
85 * **注意:** 使用`sd_dump`的并行转储仅在查询调度节点coorinator上并行化。
86
87
88 `sd_dump`将打开`njobs` + 1个到数据库的连接,因此请确保您的`max_connections`设置足够高以容纳所有连接。
89
90 在运行并行转储时请求对数据库对象的排他锁可能导致转储失败。原因是`sd_dump`主进程对工作进程稍后将要转储的对象请求共享锁,以确保没有人删除它们并在转储运行时使它们消失。如果另一个客户端随后请求对表进行排他锁,则该锁将不会被授予,但将排队等待主进程的共享锁被释放。因此,对该表的任何其他访问也不会被授予,并且将在排他锁定请求之后排队。这包括尝试转储表的工作进程。 如果没有任何预防措施,这将是典型的死锁情况。为了检测到这种冲突,`sd_dump`工作进程使用`NOWAIT`选项请求另一个共享锁。如果未向工作进程授予此共享锁,则其他人在此期间必须申请到独占锁,并且无法继续进行转储,因此`sd_dump`别无选择,只能中止转储。
91
92
93 \-n `schema` \| --schema=`schema`
94 : 仅转储与schema匹配的模式;这将同时选择模式本身及其所有包含的对象。 如果未指定此选项,则将转储目标数据库中的所有非系统模式。
95
96 通过编写多个`-n`开关可以选择多个模式。 同样,根据`ssql`的` \d `命令使用的相同规则,将schema参数解释为模式,因此也可以通过在模式中写入通配符来选择多个模式。使用通配符时,如果需要请小心引用该模式,以防止Shell扩展通配符。
97
98 注意:当指定-n时,`sd_dump`不会尝试转储所选模式可能依赖的任何其他数据库对象。因此,不能保证特定模式转储的结果可以自己成功地恢复到干净的数据库中。
99
100 * **注意:** 指定`-n`时,不转储非模式对象(例如blob)。可以使用`--blobs`开关将blob添加回转储。
101
102
103 \-N `schema` \| --exclude-schema=`schema`
104 : 不要转储任何与schema匹配的模式。 根据与`-n`相同的规则解释该模式。`-N`可以多次给出,以排除与几种模式中的任何一种匹配的模式。当同时给出`-n`和`-N`时,行为是仅转储与至少一个`-n`开关匹配但不与`-N`开关匹配的模式。如果出现`-N`而没有`-n`,则与`-N`匹配的模式将从正常转储中排除。
105
106 \-o \| --oids
107 : 转储对象标识符(OID)作为每个表的数据的一部分。 对于要还原到PalopgMPP数据库中的文件,建议不要使用此选项。
108
109 \-O \| --no-owner
110 : 不要输出命令来设置对象的所有权以匹配原始数据库。 默认情况下,`sd_dump`发出`ALTER OWNER`或`SET SESSION AUTHORIZATION`语句来设置创建的数据库对象的所有权。
111
112 除非由数据库管理员(或拥有脚本中所有对象的同一用户)启动脚本,否则运行脚本时这些语句将失败。
113
114 要使脚本可以被任何用户恢复,但将赋予该用户所有对象的所有权,请指定`-O`。 此选项仅对纯文本格式有意义。
115
116 对于归档格式,可以在调用`sd_restore`时指定该选项。
117
118 \-s \| --schema-only
119 : 仅转储对象定义(模式),而不转储数据。
120
121 此选项与`--data-only`相反,类似于`--section = pre-data --section = post-data`(不要将此与`--schema`选项混淆,该选项以不同的含义使用"schema"一词)。
122
123 要仅排除数据库中一部分表的表数据,请参见`--exclude-table-data`。
124
125 \-t `table` \| --table=`table`
126 : 仅转储与表模式匹配的表(或视图,序列或外部表)。 以`schema.table`格式指定表。
127
128 通过写入多个`-t`开关可以选择多个表。 而且,根据`ssql`的`\d`命令使用的相同规则,将table参数解释为模式,因此也可以通过在模式中写入通配符来选择多个表。
129
130 使用通配符时,如果需要请小心引用模式,以防止Shell扩展通配符。 使用`-t`时`-n`和`-N`开关无效, 因为`-t`选择的表将被转储,而与那些开关无关,并且非表对象也将不被转储。
131
132 **注意:** 当指定`-t`时,`sd_dump`不会尝试转储所选表可能依赖的任何其他数据库对象。因此,不能保证自己可以成功地将特定表转储的结果还原到干净的数据库中。另外,`-t`不能用于指定子表分区。 要转储分区表,必须指定父表名称。
133
134
135 \-T `table` \| --exclude-table=`table`
136 : 不要转储任何与表模式匹配的表。 该模式根据与`-t`相同的规则进行解释。 `-T`可以多次给出,以排除与几种模式中的任何一种匹配的表。
137
138 当同时给出`-t`和`-T`时,行为是仅转储与至少一个`-t`开关匹配但不与`-T`开关匹配的表。如果出现`-T`而没有`-t`,则与`-T`匹配的表将从正常转储中排除。
139
140 \-v \| --verbose
141 : 指定详细模式。 这将导致`sd_dump`向转储文件输出详细的对象注释和开始/停止时间,并向标准错误输出消息。
142
143 \-V \| --version
144 : 打印`sd_dump`版本并退出。
145
146 \-x \| --no-privileges \| --no-acl
147 : 防止转储访问权限(`GRANT/REVOKE`命令)。
148
149 \-Z 0..9 \| --compress=0..9
150 : 指定要使用的压缩级别。 零表示无压缩。 对于自定义存档格式,此选项指定压缩单个表数据段,并且默认设置为中等压缩。
151
152 对于纯文本输出,设置非零压缩级别会使整个输出文件被压缩,就好像它是通过`gzip`馈送的一样。 但默认设置为不压缩。
153
154 tar存档格式当前不支持压缩。
155
156 \--binary-upgrade
157 : 此选项供就地升级工具使用。 不建议或不支持将其用于其他目的。 该选项的行为在将来的版本中可能会更改,恕不另行通知。
158
159 \--column-inserts \| --attribute-inserts
160 : 将数据转储为带有显式列名(`(INSERT INTO``table``(``column``, ...) VALUES ...)`)的`INSERT`命令。 这会使恢复非常缓慢。 它主要用于制作可以装入非基于PostgreSQL体系的数据库的转储。
161 但是,由于此选项为每一行生成一个单独的命令,因此在重新加载行时发生错误只会导致该行丢失,而不是整个表内容丢失。
162
163 \--disable-dollar-quoting
164 : 此选项禁止对函数体使用美元引号,并强制使用SQL标准字符串语法对其进行引用。
165
166 \--disable-triggers
167 : 仅当创建仅数据转储时,此选项才相关。 它指示`sd_dump`包含一些命令,以在重新加载数据时临时禁用目标表上的触发器。如果不想在数据重装期间调用的表上有触发器,请使用此选项。
168
169 为`--disable-triggers`发出的命令必须以数据库管理员身份执行。因此,还应该使用`-S`指定数据库管理员名,或者最好小心地以数据库管理员身份启动生成的脚本。此选项仅对纯文本格式有意义。 对于归档格式,可以在调用`sd_restore`时指定该选项。
170
171 `--exclude-table-data=table`
172 : 不要为与`table`模式匹配的任何表转储数据。 该模式根据与`-t`相同的规则进行解释。`--exclude-table-data`可以多次给出,以排除与多种模式中的任何一种匹配的表。当需要特定表的定义时,即使不需要其中的数据,此选项也很有用。
173
174 要排除数据库中所有表的数据,请参见`--schema-only`。
175
176 `--if-exists`
177 : 清理数据库对象时,请使用条件命令(即添加`IF EXISTS`子句)。 除非还指定了`--clean`,否则此选项无效。
178
179 \--inserts
180 : 将数据转储为`INSERT`命令(而不是`COPY`)。 这会使恢复非常缓慢。它主要用于制作可以装入非基于PostgreSQL体系的数据库的转储。
181
182 但是,由于此选项为每一行生成一个单独的命令,因此在重新加载行时发生错误只会导致该行丢失,而不是整个表内容丢失。
183
184 请注意,如果重新排列了列顺序,则还原可能会完全失败。
185
186 `--column-inserts`选项可以安全地防止列顺序更改,尽管速度更慢。
187
188 \--lock-wait-timeout=`timeout`
189 : 不要在转储开始时一直等待获取共享表锁。 相反,如果无法在指定的`timeout`时间内锁定表,则失败。将`timeout`指定为毫秒数。
190
191 \--no-security-labels
192 : 不要转储安全标签。
193
194 \--no-synchronized-snapshots
195 : 该选项允许在6.0之前版本的PalopgMPP数据库服务器上运行`sd_dump -j`。 有关更多详细信息,请参见`-j`参数的文档。
196
197 \--no-tablespaces
198 : 不输出命令以选择表空间。 使用此选项,将在还原期间的默认表空间中创建所有对象。
199
200 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用`sd_restore`时指定选项。
201
202 \--no-unlogged-table-data
203 : 不要转储未记录表的内容。 此选项对是否转储表定义(模式)没有影响。 它仅禁止转储表数据。 从备用服务器转储时,始终排除未记录表中的数据。
204
205 \--quote-all-identifiers
206 : 强制给所有标识符加上引号。 当从PalopgMPP数据库主版本不同于`sd_dump`的中转储数据库时,或者打算将输出加载到其他主版本的服务器中时,建议使用此选项。
207
208 默认情况下,`sd_dump`仅为在其主版本中为保留字的标识符加引号。在处理其他版本的保留字可能略有不同的服务器时,有时会导致兼容性问题。使用`--quote-all-identifiers`可以防止此类问题,但代价是难以阅读的转储脚本。
209
210 \--section=`sectionname`
211 : 仅转储命名节。 节名称可以是`pre-data`,`data`或`post-data`。 可以多次指定此选项以选择多个节。默认为转储所有节。
212
213 `data`节包含实际的表数据和序列值。 `post-data`项包括索引,触发器,规则和约束的定义,而不是经过验证的检查约束。`pre-data`项包括所有其他数据定义项。
214
215 \--serializable-deferrable
216 : 对转储使用可序列化的事务,以确保使用的快照与以后的数据库状态一致;但这要通过等待事务流中不会出现异常的点来完成,这样就不会存在转储失败或导致其他事务因serialization_failure而回滚的风险。
217
218 此选项对仅用于灾难恢复的转储无益。 这对于在原始数据库继续更新的同时用于加载数据库副本以进行报告或其他只读负载共享的转储很有用。没有它,转储可能反映出与最终提交的事务的任何串行执行都不相符的状态。例如,如果使用批处理技术,则在转储中批次可能显示为已关闭,而批次中的所有项目都不会出现。
219
220 如果在启动`sd_dump`时没有活动的读写事务,则此选项没有任何区别。如果读写事务处于活动状态,则转储的开始可能会延迟不确定的时间长度。运行后,无论有无选项,性能都是相同的。
221
222
223 \--use-set-session-authorization
224 : 输出SQL标准的`SET SESSION AUTHORIZATION`命令而不是`ALTER OWNER`命令来确定对象所有权。
225
226 这使转储更加符合标准,但是依赖转储中对象的历史记录,可能无法正确还原。 使用`SET SESSION AUTHORIZATION`进行的转储将需要数据库管理员权限才能正确还原,而`ALTER OWNER`则需要较少的权限。
227
228 \-? \| --help
229 : 显示有关`sd_dump`命令行参数的帮助,然后退出。
230
231
232 以下选项均为连接选项,即连接PalopgMPP数据库的相关信息:
233
234 \-h `host` \| \--host=`host`
235 : 运行PalopgMPP coordinator数据库服务器的计算机的主机名。如果未指定,则从环境变量`SDHOST`读取或默认为localhost。
236
237 \-p `port` \| \--port=`port`
238 : PalopgMPP coordinator数据库服务器正在侦听连接的TCP端口。 如果未指定,则从环境变量`SDPORT`读取或默认为3000。
239
240 \-U `username` \| --username=`username`
241 : 要用作连接的数据库角色名称。 如果未指定,则从环境变量`SDUSER`读取或默认为当前系统角色名称。
242
243 \-w \| \--no-password
244 : 不发出密码提示。 如果服务器要求密码验证,而其他方式(例如`.sdpass`文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。
245
246 \-W | \--password
247 : 强制输入密码提示。
248
249 \--role=`rolename`
250 : 指定用于创建转储的角色名称。 此选项使`sd_dump`在连接到数据库后发出`SET ROLE rolename`命令。当通过身份验证的用户(由`-U`指定)缺少`sd_dump`所需的特权,但可以切换到具有所需权限的角色时,此功能很有用。某些安装有禁止直接以数据库管理员身份登录的策略,并且使用此选项可以在不违反策略的情况下进行转储。
251
252
253注解
254: 当选择了仅数据转储并且使用了选项`--disable-triggers`时,`sd_dump`发出命令以在插入数据之前禁用用户表上的触发器,并在插入数据后发出命令以重新启用它们。如果还原在中间停止,则系统catalog可能处于错误状态。
255
256 `sd_dump`生成的转储文件不包含优化器用于制定查询计划决策的统计信息。因此,从转储文件还原后运行`ANALYZE`是明智的,以确保最佳性能。
257
258 `sd_dump`的数据库活动通常由统计信息收集器收集。 如果不希望这样做,则可以通过`SDOPTIONS`或`ALTER USER`命令将参数`track_counts`设置为false。
259
260
261## 示例
262
263将名为`mydb`的数据库转储到SQL脚本文件中:
264
265 ``` bash
266 sd_dump mydb > db.sql
267 ```
268
269 要将这样的脚本重新加载到名为`newdb`的(新创建的)数据库中:
270
271 ``` bash
272 ssql -d newdb -f db.sql
273 ```
274
275 以tar文件格式转储PalopgMPP数据库,并包含分发策略信息:
276
277 ``` bash
278 sd_dump -Ft mydb > db.tar
279 ```
280
281 要将数据库转储到自定义格式的存档文件中:
282
283 ``` bash
284 sd_dump -Fc mydb > db.dump
285 ```
286
287 要将数据库转储到目录格式的存档中:
288
289 ``` bash
290 sd_dump -Fd mydb -f dumpdir
291 ```
292
293 要将数据库与5个工作作业并行转储到目录格式的存档中,请执行以下操作:
294
295 ``` bash
296 sd_dump -Fd mydb -j 5 -f dumpdir
297 ```
298
299 要将存档文件重新加载到名为`newdb`的(新创建的)数据库中:
300
301 ``` bash
302 sd_restore -d newdb db.dump
303 ```
304
305 要转储名为`mytab`的单个表:
306
307 ``` bash
308 sd_dump -t mytab mydb > db.sql
309 ```
310
311 要在`-t`和相关开关中指定大写或大小写混合的名称,您需要将名称加双引号;否则它将被折叠成小写。但是双引号对于shell来说是特殊的,因此反过来必须使用双引号。因此,要转储具有大小写混合名称的单个表,需要执行以下操作:
312
313 ``` bash
314 sd_dump -t '"MixedCaseName"' mydb > mytab.sql
315 ```
316
317
318相关命令
319: `sd_dumpall`, `sd_restore`, `ssql`
评价此篇文章
