Как ссылаться или объединять столбец, который может не существовать?

#postgresql

#postgresql

Вопрос:

Я создаю представления, ссылающиеся на представления системного каталога (например, pg_constraint ), которые должны быть развернуты в различных базах данных с различными версиями postgresql. Более поздние версии представлений системного каталога включают столбцы, которые не существовали в предыдущих версиях postgresql. Я бы предпочел иметь единую версию моего представления, которую я мог бы широко развертывать, вместо того, чтобы поддерживать несколько версий, чтобы, когда мы (неизбежно) обновим некоторые из наших старых баз данных, определение представления не нужно было обновлять (кто не забудет это сделать? ). )…

Вероятно, это невозможно, и, возможно, я хватаюсь за соломинку, но я не хочу так легко сдаваться, пока все еще возможно, что у кого-то может быть решение.

Ответ №1:

Не создавайте представление в системных каталогах, это помешает вам выполнить обновление pg_upgrade .

Используйте функцию, которая либо составляет запрос с помощью динамического SQL, либо выполняет различные статические запросы в зависимости от версии сервера. Затем вы можете определить представление с помощью этой функции.