我们的 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 的表,它应该成为我们的第一个“碎片”。将来我们会定期添加新的“碎片”。在某些时候,较旧的分片将被移动到另一个表空间(在更便宜的硬件上,因为它们变得不那么重要)。
我现在的问题: 有没有办法将现有表“更改”为外部表?
最佳答案
无法使用 alter table 来执行此操作。
您基本上必须手动完成。这与进行表分区没有什么不同(真的)。您创建分区,加载数据。您直接对分区进行读写操作。
现在就您的情况而言,就进行分片而言,我会考虑使用多种工具来减轻这种痛苦。首先,如果您确保首先按照您喜欢的方式拆分表,则可以在移动所有内容时使用 Bucardo 等逻辑复制解决方案来复制写入。
还有一些其他方法(并行读取器和写入器)可能会以数据库负载为代价为您节省一些时间,但这些都是小众工具。
标准 PostgreSQL 的分片管理没有本地解决方案(而且我在这方面对 Postgres-XL 的了解还不够,不知道它能多好地管理不断变化的分片标准)。然而,只需一点点工作和知识,几乎任何事情都是可能的。
关于postgresql - (如何)是否可以将表转换为 Postgres 中的外部表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380127/