使用 pg_restore 恢复表不包括主键或索引

Posted

技术标签:

【中文标题】使用 pg_restore 恢复表不包括主键或索引【英文标题】:restoring table with pg_restore does not include primary key or indexes 【发布时间】:2018-07-29 08:08:39 【问题描述】:

所以我使用 pg_dump 对表进行了备份:

pg_dump -U bob -F c -d commerce -t orders > orders.dump

这个表有几个列出的索引,比如一个主键

但是,当我使用 pg_restore 将此表还原到另一个系统上的开发数据库时:

pg_restore -U bob -d commerce -t orders > orders.dump

没有列出主键或索引

我做错了什么?

【问题讨论】:

> orders.dump 对于 pg_restore 命令看起来是错误的。输入文件应使用> 指定为最后一个参数 我测试过,当你用-t tablename转储一个表时,它的约束和索引都包含在转储中。 【参考方案1】:

你没有做错任何事,不幸的是pg_restore -t 只恢复表,没有别的,不管你如何创建转储以及转储本身的内容。 V12 PostgreSQL docs 中以某种方式澄清了这一点,其中指出:

此标志的行为与 pg_dump 的 -t 标志不同。目前在 pg_restore 中没有任何通配符匹配的规定,您也不能在其 -t 中包含模式名称。而且,虽然 pg_dump 的 -t 标志也会转储所选表的附属对象(例如索引),但 pg_restore 的 -t 标志不包括此类附属对象。

确保恢复表将包含所有索引的唯一方法是按名称对它们进行寻址,例如:

pg_restore -U bob -d commerce -t orders -I index1 -I index2 -I index3 > orders.dump

【讨论】:

以上是关于使用 pg_restore 恢复表不包括主键或索引的主要内容,如果未能解决你的问题,请参考以下文章

在已经存在主键或唯一键约束的列上创建索引

Oracle查看表索引、主键、外键、约束

使用 FireDac 仅更新重复行中的 1 个(无主键或唯一字段)

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

pg_restore数据库恢复指令

InnoDB索引实现