Ошибки при добавлении материализованных представлений нескольких столбцов, начинающихся с одного и того же оператора - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь объединить материализованные представления нескольких столбцов из таблицы в одно представление, но получаю ошибки, когда пытаюсь добавить несколько представлений, начинающихся с одного и того же типа функции.

Например, я не получаю ошибоккогда я создаю следующее материализованное представление:

create materialized view doh1mat as select 
    (left(replace(filename,'DOH_cumulative_text_filesSwimming PoolsSpas_',''),strpos(replace(filename,'DOH_cumulative_text_filesSwimming PoolsSpas_',''),'_')-1)),
    (trim(substring(coalesce(substring(content from 'Conducted By: (.*) Inspector Contact'),substring(content from 'Conducted  By: (.*) Inspector Contact')) from '\((.*)\)')))
    from doh1;

Но когда я пытаюсь добавить больше столбцов, например, со следующим sql:

create materialized view doh1mat as select 
    (left(replace(filename,'DOH_cumulative_text_filesSwimming PoolsSpas_',''),strpos(replace(filename,'DOH_cumulative_text_filesSwimming PoolsSpas_',''),'_')-1)),
    (left(NULLIF(regexp_replace(substring(content from 'Zip: (.*) Type:'), '\D','','g'), ''),5)),
    (trim(substring(coalesce(substring(content from 'Conducted By: (.*) Inspector Contact'),substring(content from 'Conducted  By: (.*) Inspector Contact')) from '\((.*)\)'))),
    (substring(content from 'Owner: (.*) Person')),
    (substring(content from 'Charge: (.*) Pool')),
    (trim(coalesce(replace(substring(content from 'VOLUME (.*) POOL L'),'.',''),replace(substring(content from 'VOLUME (.*) POOL  L'),'.','')))),
    (trim(coalesce(substring(content from 'Pool  Operator: (.*) Phone'),substring(substring(content from 'Pool  Operator: (.*) Phone') from '(.*) Phone')))),
    (substring(content from 'Phone: (.*) Purpose')),
    (substring(content from 'Phone: (.*) Phone')),
    (substring(content from 'Email: (.*) Pool  Operator')),
    (substring(content from 'Address\(es\): (.*) DOH'))
    from doh1;

, я получаю "ERROR: столбец" left ", указанныйболее одного раза ".

Поэтому я попытался изменить sql, чтобы поставить имя столбца перед каждой функцией:

create materialized view doh1mat as select 
    (phone_operator(substring(content from 'Phone: (.*) Phone'))),
    (email_string(substring(content from 'Email: (.*) Pool  Operator'))),
    (email_string_2(substring(content from 'Address\(es\): (.*) DOH')))
    from doh1;

Но ошибка" Я получаю ": функция phone_operator (text) неСуществовать ".

Есть ли способ" переименовать "или создать псевдоним столбцов при создании материализованного представления?

Если нет, то как я могу создатьматериализованные представления без Postgres, принимающего первый оператор за имя столбца? Кроме того, почему оператор, такой как LEFT (... является именем столбца, когда он все еще выполняет команду?

1 Ответ

0 голосов
/ 30 января 2019

См. Комментарий a_horse_with_no_name для ответа.

Мне просто нужно было добавить псевдоним после каждого столбца, например:

create materialized view doh1mat as select 
    (substring(content from 'Phone: (.*) Purpose')) as phone_facility,
    (substring(content from 'Phone: (.*) Phone')) as phone_operator,
    (substring(content from 'Email: (.*) Pool  Operator')) as email_string,
    (substring(content from 'Address\(es\): (.*) DOH')) as email_string_2
    from doh1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...