Мне нужно найти способ для моего приложения добавить столбец в представление PostgreSQL. Это должно быть сделано динамически, поэтому я не могу жестко закодировать свое представление, вместо этого мне нужно получить его реальный код с помощью какого-то безумного выбора или чего-то в этом роде.
Я подумал об этом, вызвав процедуру PostgreSQL, которая получает скрипт создания представления, удаляет его и затем воссоздает его с новым столбцом. Проблема в том, что я не знаю, как получить сценарий создания представления.
Как я могу это сделать или есть другой способ сделать это?
Мое приложение использует PHP с Zend Framework 2, и я использую базу данных Postgres.
Редактирование 1: я решил свою проблему, сохранив оригинальный скрипт CREATE VIEW в переменной, а затем перебрал дополнительные столбцы, добавив их в скрипт.
PostgreSQL не хранит «фактический код» представления. То есть PostgreSQL не хранит create view
заявление.
Ты можешь использовать create or replace view ...
добавить столбцы в конце. Но у вас уже должны быть столбцы и их порядок, или вы должны просмотреть всю эту информацию в информационные_схемы или в Системные каталоги PostgreSQL.
Чтобы заменить представление, вы должны быть владельцем или членом роли-хозяина.
Как указывает pozs, существует группа функций pg_get_viewdef (). Они не возвращают оригинал create view
Заявление, но я довольно уверен, что важная информация — имена и порядок столбцов — позволит вам добавить столбцы «в конце».
Это актуально create view...
заявление, которое я написал, чтобы запустить против моей таблицы календаря.
create view weekdays as
select cal_date, day_of_week
from calendar
where day_of_week in ('Mon', 'Tue', 'Wed', 'Thu', 'Fri');
Вот как я использовал pg_get_viewdef ().
select pg_get_viewdef(to_regclass('weekdays'));
И вот что вернулось.
ВЫБЕРИТЕ calendar.cal_date, calendar.day_of_week ОТ календаря WHERE (calendar.day_of_week = ANY (ARRAY ['Mon' :: bpchar, 'Tue' :: bpchar, 'Wed' :: bpchar, 'Thu' :: bpchar, 'Fri' :: bpchar]));
Других решений пока нет …