如何强制使用特定表空间执行pg_restore任务?

时间:2019-03-06 10:36:37

标签: postgresql

在需要并行并行运行多个pg_restore任务并且需要将其中一些引导到SSD上的表空间而将其他一些引导到SSD上的表空间中的情况下,是否存在某种巧妙的方法来强制对pg_restore任务使用特定表空间标准磁盘?

我们得到了这个用例-每天晚上,我们需要将每日分区复制到新的仓库数据库中。当前使用标准的pg_dump / pg_restore(出于内部策略原因,目前尚无法进行逻辑复制,尽管这是非常可取的)。

更多pg_restore任务在目标数据库上并行运行,因此我需要为特定任务设置特定的目标表空间-因此,全局“ default_tablespace”设置无济于事。我也无法重新配置源数据库以直接在转储中具有适当的表空间,更不用说随着仓库数据库的增长,我将需要不时更改目标表空间。

最初,我认为PG环境变量“ PGTARGETSESSIONATTRS”可能会帮助我为pg_restore的特定会话设置“ default_tablespace”,但看起来该变量无法做到。

数据库是PG 10(源)和PG 11(目标)。

1 个答案:

答案 0 :(得分:0)

根据来自@a_horse_with_no_name的评论,我测试了此命令序列,该命令可以满足我的需要:

  • pg_dump -U user1 -v -F c --no-tablespaces -t schema.table database1 -f exportfile
  • pg_restore -U user2 -v --no-tablespace -d database2 –仅模式-c exportfile
  • psql -U user2 -d database2 -c“更改表schema.table设置表空间xxxx”
  • pg_restore -U user2 -v --no-tablespace -d database2-仅数据导出文件