在物化视图中使用 union 或 union all 导致 PostgreSQL 出错

Using a union or union all in Materialized View causing an Error in PostgreSQL

我正在创建一个包含联合查询的物化视图,但出现以下错误:多次指定列 "column1"。

此错误的潜在原因是什么?

我该如何解决这个问题?

这是我的代码的示例:

CREATE MATERIALIZED VIEW schema.view_name_mv
(
     "column1",
     "column2",
     "column3"
)
as 
select 
     tn1.column1, 
     tn1.column2,
     tn1.column3
from schema.table_name1 tn1,
     schema.table_name2 tn2
where tn1.column1 = tn2.column1
and   tn1.column2  = tn2.column2
union all 
select 
     tn1.column1, 
     tn1.column2, 
     tn1.column3
from schema.table_name1 tn1, 
     schema.table_name3 tn3
where tn1.column1 = tn3.column1
and   tn1.column2 = tn3.colum2;

注意:运行在 PGAdmin 4 中独立查询 运行 没问题,但使用相同的查询创建物化视图会抛出上面列出的错误。

当您加入 table 并且您没有指定哪个列属于每个 table 时,如果两个列具有相同的名称,就会发生此错误。我想这些值 column1、column2 和 column3 是假的,因为它们充满了语法错误,如下所示,我真的不知道在你的真实代码中你是否忘记重命名列。

尝试在你的真实代码中寻找这样的东西:

select column1 from 
schema.table1 tn1, schema.table2 tn2 
where tn1.column1 = tn2.column2

在此示例中,未指定 column1 是来自 table1 还是 table2

此示例中的语法错误:

CREATE MATERIALIZED VIEW schema.view_name_mv
(
     "column1",
     "column2",
     "column3", << remove this comma
)


union all 
select 
     tn1.colum1, << the name here is wrong, replace to column1
     tn1.colum2, << the name here is wrong, replace to column2
     tn1.column3