如何在PostgreSQL视图中使用colpivot函数?
解决PostgreSQL中colpivot函数创建视图时的void伪类型错误
这个错误的核心原因很明确:你用的colpivot函数返回的是void伪类型——它的作用是帮你生成指定的表(也就是你参数里的_test_pivoted),而不是直接返回可查询的结果集,所以不能把它放在CREATE VIEW的SELECT子句里。
给你调整一下执行步骤,就能解决问题:
步骤1:先调用colpivot生成目标表
首先单独执行colpivot函数,让它创建出_test_pivoted表:
SELECT colpivot('_test_pivoted', 'select * from _test', array['year', 'month'], array['country', 'state'], '#.income', null);
执行这条语句后,你看不到返回结果(因为函数是void类型),但_test_pivoted表已经被创建/更新了。
步骤2:基于生成的表创建视图
现在直接用生成好的表来定义视图:
CREATE OR REPLACE VIEW fun_test AS SELECT * FROM _test_pivoted;
步骤3:查询视图验证结果
之后就可以正常查询视图了:
SELECT * FROM fun_test;
额外提醒
因为colpivot是动态生成表的,如果你源表_test的数据有更新,需要重新执行步骤1的colpivot调用,刷新_test_pivoted表后,视图fun_test才会显示最新的数据。如果需要频繁刷新,你可以把这两步封装成一个PostgreSQL存储过程,方便一键执行。
内容的提问来源于stack exchange,提问作者Marco YG
相关产品推荐
相关产品推荐

