使用 Postgres table 继承
Use of Postgres table inheritance
既然Postgres也支持分区tables,那child有什么用 table.
假设有 table 个用户有一个列 created_date
。我们可以通过两种方式存储数据:
- 我们创建了这个用户table的很多childtable,然后在
created_date
的基础上分发用户的数据(比如说,一个table 每个日期,例如 user_jan01_21
).
- 我们可以使用分区键
created_date
创建分区 table
那么这些解决方案有什么区别呢?
基本上,我想知道什么问题 table 继承可以解决分区不能解决的问题。
我还有一个疑惑:如果按照方案1,查询用户table,不带ONLY
关键字,会不会扫描所有child table小号?
例如:
SELECT * FROM WHERE where created_date = current_date - 10;
如果 objective 正在分区,如您的示例所示,那么使用 table 继承就没有优势。声明式分区在易用性、性能和可用功能方面要优越得多。
Table 继承有与分区无关的用途。分区不提供的功能是:
child table 可以有额外的列
一个table可以继承多个table
使用 table 继承,如果您 select 来自 parent table,您还将获得 child table 的所有结果]s,就像您使用 UNION ALL
组合结果一样。
既然Postgres也支持分区tables,那child有什么用 table.
假设有 table 个用户有一个列 created_date
。我们可以通过两种方式存储数据:
- 我们创建了这个用户table的很多childtable,然后在
created_date
的基础上分发用户的数据(比如说,一个table 每个日期,例如user_jan01_21
). - 我们可以使用分区键
created_date
创建分区 table
那么这些解决方案有什么区别呢? 基本上,我想知道什么问题 table 继承可以解决分区不能解决的问题。
我还有一个疑惑:如果按照方案1,查询用户table,不带ONLY
关键字,会不会扫描所有child table小号?
例如:
SELECT * FROM WHERE where created_date = current_date - 10;
如果 objective 正在分区,如您的示例所示,那么使用 table 继承就没有优势。声明式分区在易用性、性能和可用功能方面要优越得多。
Table 继承有与分区无关的用途。分区不提供的功能是:
child table 可以有额外的列
一个table可以继承多个table
使用 table 继承,如果您 select 来自 parent table,您还将获得 child table 的所有结果]s,就像您使用 UNION ALL
组合结果一样。