В моем приложении используется база данных PostgreSQL 9.1. Мы находимся в нашей бета-фазе, и мы иногда обнаруживаем ошибки в нашей схеме PostgreSQL. У нас есть установщик, написанный и работающий, но теперь мы находимся в том месте, где есть установки, которые необходимо будет обновить, когда мы сделаем нашу следующую версию.Как создать скрипт обновления схемы базы данных в PostgreSql 9.1?
Я отправил более ранний вопрос, спрашивая, как заставить мой сценарий принимать решения. Ответ, с которым я пошел, заключался в том, чтобы использовать инструкцию DO. Это отлично работает, но я столкнулся с проблемой.
Мы добавили таблицу в нашу базу данных, которая отслеживает последнюю версию, которая была установлена. Мой сценарий выглядит так:
DO $$$
BEGIN
IF NOT EXISTS (SELECT * FROM "CarSystem"."CarSystem_Versions" WHERE "VersionId" = 2) THEN
-- Schema update statements go here
END IF;
END;
$$$ LANGUAGE plpgSQL;
Большинство утверждений являются простыми типами, такими как инструкции CREATE или DROP. Но одна из вещей, которые я должен сделать в этом следующем выпуске, - это применить кодовое изменение к сохраненной функции. Функция также записывается в plpgSQL. Я использовал три (3) $$$ символа в коде выше, потому что эта хранимая процедура использует два (2) $$ символа, потому что я полагал, что это сделает вложенные plpgSQL похожими, а не сделает второй набор знаков доллара прекратить первый ,
Но я получаю сообщение об ошибке, когда PostgreSQL попадает в инструкцию DECLARE в моей хранимой процедуре. Он не видит текст функции как цитируемый.
Каков правильный способ донга? Должен ли я просто поместить хранимую процедуру за пределы этого блока DO и использовать statemnt CREATE или REPLACE, чтобы объявить его? Или я могу сохранить код внутри условия?
Тони
Спасибо! Я дам этот выстрел завтра и посмотрю, смогу ли я заставить его работать. Звучит точно так, как мне нужно. –
Это сработало для меня! Еще раз спасибо! –