PostgreSQL - можно ли использовать функции, возвращающие имя в качестве имени представления - PullRequest
0 голосов
/ 08 января 2019

Вот что я пытаюсь сделать:

CREATE OR REPLACE FUNCTION getViewName ()
RETURNS text LANGUAGE plpgsql AS $name$
DECLARE
    name text ;
BEGIN 
    SELECT 'test_schema.backup_' || to_char(CURRENT_DATE,'yyyymmdd')  into name ;
    RETURN name ;
END ; $name$;

, которая успешно создает функцию.

=> select getViewName();
          getviewname
-------------------------------
 test_schema.backup_20190108
(1 row)

но когда я попробую это:

=> create or replace view getViewName() AS select * from test_schema.backup ;
ERROR:  syntax error at or near ")"
LINE 1: create or replace view getViewName() AS select * from ...

Могу ли я не использовать возврат функции в качестве имени моего вида?

Я не хочу использовать решение, подобное this , потому что в действительности код будет выглядеть так:

create or replace view getViewName() AS select
.....

где .... более 1 тыс. Строк кода, и я не хочу помещать его в формат.

Есть ли альтернатива?

Edit:

Я попытался создать временное представление с фиксированным именем.

Затем сделайте что-то вроде:

DO
$$
BEGIN
EXECUTE format( 'CREATE OR REPLACE VIEW %I '
                ' AS SELECT * FROM test_schema.mytemp_view', getViewName()  ) ;
END ;
$$ LANGUAGE plpgsql ;

Но тогда проблема в том, что я не могу удалить mytemp_view, поскольку новое динамическое представление зависит от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...