Объединить результат SELECT в EXECUTE - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь воссоздать представление из резервной копии определения, используя EXECUTE в блоке анонимного кода (DO $$ ... BEGIN... END$$), но не могу заставить его работать. Это примерно то, что я до сих пор:

EXECUTE 'CREATE VIEW image AS (' || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')';

Таблица с резервной копией определений представлений была сделана так

CREATE TABLE  tmp_view_backup
AS
(select viewname,definition from pg_views
WHERE schemaname = 'public'
);

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

postgres=# select char_length('CREATE VIEW image AS ('  || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')') as f ;
 f 
---

(1 row)

Что это? Пустая строка? Если я опускаю выбор, я получаю нормальный ответ (например, длина строки 23).

1 Ответ

3 голосов
/ 15 апреля 2019

Вы можете использовать параметр PSQL \gexec.

SELECT format('CREATE VIEW image AS  %s ', definition)
FROM tmp_view_backup 
WHERE viewname = 'image';\gexec  

Или в блоке DO

DO $$
BEGIN

EXECUTE format('CREATE VIEW image AS  %s ', definition)
FROM  tmp_view_backup 
WHERE viewname = 'image';
END $$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...