Как CAST тип данных, а также изменить значение с помощью CASE при создании MATERIALIZED VIEW?(PostgreSQL) - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно создать МАТЕРИАЛИЗОВАННЫЙ ВИД на столе.Один из столбцов очень проблематичен.Мне нужно изменить его значения и тип данных в запросе.Я хотел бы спросить вас, как быстро это происходит при создании matview?

У меня есть несколько таблиц в качестве вывода некоторых процессов декодирования.Чтобы сделать эти процессы более эффективными, я должен создать, например, тест-запросы (и несколько других вещей, не связанных здесь).Итак, в заключение, мне нужно создать МАТЕРИАЛИЗОВАННЫЙ ВИД таблиц, как уже упоминалось.Один из столбцов содержит неправильные данные с типом wrond (возвращает TEXT вместо VARCHAR).К счастью, я мог их быстро декодировать, но приведение типов - другое дело.

Проблема в том, что из-за недостатка опыта я не могу найти правильный способ изменить значения и тип сразу!У меня есть два решения, но они не выглядят очень элегантно:

1) Я предварительно создал таблицу и изменил значение столбцов после секции SELECT, чем я создал matview из этой таблицы (это медленнои сложный для десятков строк)

2) Я CAST сам оператор CASE, в котором я изменяю значения, и закрывал его с помощью END AS 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, но все они привели меня к различным ошибкам.

В заключение: мне нужно, чтобы second_column был приведен как VARCHAR в моемmatview со значениями «A» или «B» вместо «1» или «2», которые являются ТЕКСТАМИ.Результаты, которые я получаю, не соответствуют моим ожиданиям, однако они более или менее верны.

1 Ответ

0 голосов
/ 04 июля 2019

Есть ли причина, по которой вы не можете назвать псевдоним 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...