1

我们的 Postgres 生产数据库中有一个大表,我们希望使用外部表和继承开始“分片”。

所需的体系结构将有 1 个(空)表定义架构和几个从空“父”表继承的外部表。(可以在 Postgres 9.5 中使用)

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

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

我现在的问题是: 有没有办法将现有表“更改”为外部表?

4

1 回答 1

0

没有办法使用alter table 来做到这一点。

你真的必须基本上手动完成。这与(实际上)进行表分区没有什么不同。您创建分区,加载数据。您将读取和写入定向到分区。

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

还有一些其他方法(并行读取器和写入器)可能会以牺牲数据库负载为代价为您节省一些时间,但这些都是利基工具。

标准 PostgreSQL 的分片管理没有本机解决方案(在这方面我对 Postgres-XL 的了解不够多,不知道它可以如何管理不断变化的分片标准)。然而,只要有一点工作和知识,几乎任何事情都是可能的。

于 2016-07-14T17:28:53.447 回答