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

标签 postgresql inheritance sharding foreign-data-wrapper

我们的 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/

相关文章:

postgresql - 我无法在 Mac Big Sur 上的 MAMP 中添加 pgsql PDO 驱动程序

ruby-on-rails - 我怎样才能称呼至少有一个 child 关系的 parent ?

c++ - 虚函数重载

mysql - 大型引用表的 mysql 替代品

php - 将 PHP 应用程序与 MySQL Fabric 连接(使用 php 感知连接器)

c - 如何为查询字符串正确分配内存?

sql - 为每个 Id 比较 PostgreSQL 中的不同行

java - 使用抽象子类设置 super 属性

c++ - 复合类 C++ 中的冗余代码

nosql - Cassandra 是否支持分片?