2

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

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 VIEW和正常工作?DROP VIEW
4

1 回答 1

3

更新:视图支持已通过此 PR添加到 Citus 。

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

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

  • 使用 UDF 或 PL/pgSQL 函数来包装视图查询,而不是创建视图。我在 GitHub 问题中添加了具体示例

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

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

于 2016-04-12T14:39:06.237 回答