创建物化视图时如何转换数据类型并使用 CASE 更改值? (PostgreSQL)

How to CAST datatype and also change value with CASE when creating MATERIALIZED VIEW? (PostgreSQL)

我需要在 table 上创建一个实体化视图。其中一列是非常有问题的。我需要在查询中更改它的值和数据类型。想请教各位,在创建matview的时候fluent流程是怎样的?

我有一堆 table 作为某些解码过程的输出。为了使这些过程更有效,我必须创建例如测试查询(以及这里不相关的其他一些东西)。好吧,总而言之,我需要创建 table 的具体化视图,正如已经提到的那样。其中一列的数据类型错误(returns TEXT 而不是 VARCHAR)。幸运的是我可以很快地解码它们,但是类型转换是另一回事。

问题是,由于缺乏经验,我无法立即找到更改值和类型的正确方法!我已经有两个解决方案,但它们看起来不太优雅:

1) 我预先创建了一个 table 并在 SELECT 部分之后更改了列值,而不是从 table 中创建了 matview(对于几十行)

2) 我 CAST 了 CASE 语句本身,我在其中更改了值,并用 END AS VARCHAR 关闭了它(它工作得很好,除了字段名称从 matview 中消失了,这让我很伤心)。

这样 second_column 未转换为 TEXT:

CREATE MATERIALIZED VIEW IF NOT EXISTS some_schema.some_matview AS
    (SELECT
        first_column,
        CASE
            WHEN second_column = '1' THEN 'A'
            WHEN second_column = '2' THEN 'B'
        END AS second_column,
        third_column,
    FROM base_schema.base_table);

这种方式 second_column 可能被转换为 VARCHAR 但在 matview 中没有字段名称可见:

CREATE MATERIALIZED VIEW IF NOT EXISTS some_schema.some_matview AS
    (SELECT
        first_column,
        CAST(CASE
            WHEN second_column = '1' THEN 'A'
            WHEN second_column = '2' THEN 'B'
        END AS VARCHAR),
        third_column,
    FROM base_schema.base_table);

我还尝试了一些其他可能正确的 CAST-CASE 星座形式,但所有这些都导致了不同的错误。

总而言之:我需要在我的 matview 中将 second_column 转换为 VARCHAR,其值是 'A' 或 'B' 而不是作为文本的 '1' 或 '2' .我得到的结果与我的预期不符,但或多或​​少是正确的。

有什么理由不能为 CAST 的调用设置别名:

CREATE MATERIALIZED VIEW IF NOT EXISTS some_schema.some_matview AS
SELECT
    first_column,
    CAST(CASE
        WHEN second_column = '1' THEN 'A'
        WHEN second_column = '2' THEN 'B'
    END AS VARCHAR) AS second_column,    -- change here
    third_column,
FROM base_schema.base_table;