(如何)是否可以将表转换为Postgres中的外表?

时间:2016-07-14 17:01:41

标签: postgresql inheritance sharding foreign-data-wrapper

我们在Postgres生产数据库中有一个大表,我们想要开始"分片"使用外表和继承。

所需的体系结构将是1(空)表定义模式,并且几个外表继承自空的" parent"表。 (可能与Postgres 9.5一起)

我发现这篇写得很好的文章https://www.depesz.com/2015/04/02/waiting-for-9-5-allow-foreign-tables-to-participate-in-inheritance/解释了从头开始如何做的一切。 我的问题是如何将所需的数据迁移减少到最低限度。

我们现在拥有这个100多GB的表,它应该成为我们的第一个"碎片"。并且在未来我们将定期添加新的"分片"。在某些时候,较旧的分片将被移动到另一个表空间(在较便宜的硬件上,因为它们变得不那么重要)。

我现在的问题: 有没有办法去" ALTER"改为将现有表作为外表?

1 个答案:

答案 0 :(得分:0)

无法使用alter table执行此操作。

你真的必须手动完成它。这与表分区没什么不同(真的)。您创建分区,加载数据。您可以直接读取和写入分区。

现在在您的情况下,就进行分片而言,我会考虑使用一些工具来减轻这种痛苦。首先,如果确保您的表首先按照您喜欢的方式进行拆分,那么您可以使用像Bucardo这样的逻辑复制解决方案在您移动所有内容时复制写入。

还有一些其他方法(并行化读取器和编写器)可以节省一些时间而不用数据库负载,但这些都是利基工具。

标准PostgreSQL的分片管理没有原生解决方案(我对Postgres-XL在这方面知之甚少,不知道它如何管理更改分片标准)。然而,只需要一点点工作和知识,几乎任何事情都是可能的。