CitusDB 是否支持“创建视图”?

Does CitusDB support `CREATE VIEW`?

假设我们有一个名为 customer_reviews 的分布式 CitusDB table,我们尝试在其上创建一个视图:

CREATE VIEW book_reviews AS
  (SELECT * FROM customer_reviews WHERE product_group = 'Book');

这似乎有效。但是如果我们 运行:

SELECT COUNT(1) FROM book_reviews;

CitusDB 给出以下错误:

ERROR:  cannot plan queries that include both regular and partitioned relations

两个问题:

  1. 有没有办法通过在所有工作节点上手动创建视图来解决这个问题?
  2. 对于在 运行 时间自动创建和销毁视图的应用程序,有没有办法让 CREATE VIEWDROP VIEW 在主节点上正常工作?

更新:视图支持已添加到 Citus this PR

首先,我创建了 an issue 来跟踪这个。请随时添加您对该问题的评论和反馈。

在我们实施此功能之前,我看到了两个解决方法;

  • 使用 UDF 或 PL/pgSQL 函数来包装视图查询而不是创建视图。我在 GitHub 问题

  • 中添加了具体示例
  • 创建一些 UDF 和 PL/pgSQL 函数以将视图向下传播到工作节点上的分片并操纵元数据以模拟主节点上的视图。我还为 GitHub 问题

  • 添加了原型方法

我认为最适合您的方法取决于您的 CREATE VIEW 查询和应用程序堆栈。您能否解释一下您的用例以及您打算如何更多地使用视图?