PostgreSQL:备份所有表结构,但仅备份少量数据表。

36

我有一个数据库,其中包含一些应用程序设置、用户列表、部门列表和城市列表等表。我想要这些表的结构和数据。因此,如果我获得新的用户,备份将保存它。

但是,还有一些历史数据和计算数据,这些数据来自其他来源,只能在一段时间内使用,然后过期,因此备份这些数据将是浪费。但是需要有结构,以便恢复时可以创建应用程序所需的表。

目前我使用的命令会保存所有表和数据。

pg_dump -U "postgres" -h "local" -p "5432" 
        -d dbName -F c -b -v -f c:\uti\backup.dmp

关于pg_dump,我有两个额外的问题。

A) 文档说选项-b是用于blob数据。我有非常大的表格,但我认为这个选项只适用于具有BLOB字段的表格,所以在我的备份中不应该有任何区别,因为我没有这些字段吗?

B) 我看到pg_dump选项适用于表和模式。如果想保存函数代码,应该如何指定?


1
分两步完成。首先备份您的模式(包括函数),然后选择性地备份表数据。 - mlt
所以我将pg_dump导出到文件“backup”中...然后又将另一个pg_dump导出到同一文件中?如果是这样的话,请将其提交为答案,以便我可以投票支持。 - Juan Carlos Oropeza
好的,那不行,因为会覆盖第一个文件。 - Juan Carlos Oropeza
关于 a):-b 用于大对象,而不是 bytea 列(Postgres 中等同于 BLOB 的是 bytea)。 - user330315
那么什么是大对象?有很多行的表格吗? - Juan Carlos Oropeza
@JuanCarlosOropeza(为了将来的方便),您可以使用“--blobs”在转储中包含 blob 对象。 - JP Silvashy
2个回答

69

排除您不想备份的表格

pg_dump -U "postgres" -h "local" -p "5432" 
        -d dbName -F c -b -v -f c:\uti\backup.dmp
        --exclude-table-data '*.table_name_pattern_*'
        --exclude-table-data 'some_schema.another_*_pattern_*'

函数创建代码是模式的一部分。


1
那么,即使我排除了表,CREATE TABLE语句仍然会在备份中吗?此外...看起来我可以放置多个--exclude-table-data参数? - Juan Carlos Oropeza
2
是的,它只排除表数据。表创建语句将输出到备份中。是的,可以使用多个“--exclude-table-data”。 - Clodoaldo Neto
比9.2版本旧的需要分两步操作: 第一步是备份数据库架构 pg_dump --schema-only 第二步是备份除了某些表之外的表数据 pg_dump --data-only --exclude-table - FiruzzZ

0

Clodoaldo Neto的方法是正确的。然而,当使用大写字母时,我遇到了一个奇怪的问题,即使用pg_dump。该问题在这里也有描述。

因此,在我的情况下,要忽略的表名为ChangeHistory,忽略它的技巧是使用通配符来匹配大写字母,如下所示:

pg_dump [omitted for brievity] --exclude-table "*hange*istory"

1
尝试使用此命令 --exclude-table '*."ChangeHistory"""' - Александр Пушкин

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接