因此,我使用 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
没有列出主键或索引
我究竟做错了什么?
因此,我使用 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
没有列出主键或索引
我究竟做错了什么?
你没有做错任何事,不幸的是pg_restore -t
只恢复了表,没有别的,不管你如何创建转储以及转储本身里面有什么。这已在V12 PostgreSQL 文档中以某种方式澄清,其中指出:
此标志的行为与 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