Вот что я пытаюсь сделать:
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, поскольку новое динамическое представление зависит от него.