Могу ли я создать вид из другого вида, а затем удалить временный - PullRequest
0 голосов
/ 09 января 2019

Я хочу создать временный вид, например:

CREATE VIEW temp_view AS SELECT ..... 

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

--- my main_viewYYYYMMDD will have the contents of temp_view
DO
$$
BEGIN
EXECUTE format( 'CREATE OR REPLACE VIEW schema.%I '
                ' AS SELECT * FROM schema.temp_view', getViewName()  ) ;
END ;
$$ LANGUAGE plpgsql ;

, а затем DROP VIEW temp_view ; завершается ошибкой, поскольку существуют зависимые представления.

Исправит ли CREATE TEMP VIEW temp_view ... это?

1 Ответ

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

Создайте VIEW из его определения, используя pg_get_viewdef

create or replace view temp_view as select * from employees;
DO
$$
BEGIN
EXECUTE format( 'CREATE OR REPLACE VIEW public.%I '
                ' AS %s ' , 'yourviewname' ,pg_get_viewdef('temp_view', true)) ;
                DROP VIEW temp_view;
END ;
$$ LANGUAGE plpgsql ;

Вы также можете создать temp_view как Временное представление. Временные представления автоматически удаляются в конце текущего сеанса. Но это определение будет видно до конца сеанса. Вам не нужно включать drop view в свой блок do для этого сценария, если вы не выполняете над ним ничего до конца сеанса.

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