Обновление MIS3

Материал из ИбисоПедии
Версия от 08:33, 22 мая 2018; Admin (обсуждение | вклад) (Обновление метаданных)
Перейти к: навигация, поиск

Обновление метаданных

При создании скриптов обновляющих объекты БД можно использовать проверку на существование обновляемых объектов БД. Для этого достаточно написать небольшой блок кода.

Пример кода проверяющий схему

DO
$$
BEGIN
   IF NOT EXISTS(  select schema_name
                   into v_schema
                   from information_schema.schemata
                   where schema_name = 'etl') -- вместо etl указать имя схемы
   THEN
   --    <<Далее скрипт что-то делающий>>
   END IF ;
END;
$$


Пример кода, проверяющий наличие таблицы в БД и при её отсутствии создающий её:

DO
$$
BEGIN
   IF NOT EXISTS(SELECT *
                    FROM information_schema.tables where table_schema||'.'||table_name='audit.logged_actions')
                    -- Вместо 'audit.logged_actions' необходимо указать имя схемы БД в которой располагается объект
                    -- и через точку указать имя проверяемой таблицы
                    THEN
       <<Далее скрипт создающий таблицу в БД. Например: CREATE TABLE audit.logged_actions... >>
   END IF ;
END;
$$

Пример кода, проверяющий наличие в БД тригера и при его отсутсвии создающий его:

DO
$$
BEGIN
   IF NOT EXISTS(SELECT *
                    FROM information_schema.triggers
                    WHERE event_object_table = 'warehouse_accounting_entry' -- вместо warehouse_accounting_entry необходимо указать имя таблицы за которой закреплён тригер
                    AND trigger_name = 'audit_trigger_row' ) -- вместо audit_trigger_row указать имя тригера
                    THEN
       <<Далее скрипт создающий таблицу в БД. Например: CREATE TRIGGER audit_trigger_stm...>>
   END IF ;
END;
$$

Пример кода, проверяющий наличие поля БД и при его отсутствии создающий его (mm.table-имя таблицы, куда добавляется поле, newcolumn-название нового поля, comment-описание поля):

DO
$$
BEGIN
  IF NOT EXISTS(SELECT *
                FROM information_schema.columns where table_schema||'.'||table_name||'.'||column_name='mm.table.newcolumn')
  THEN
     <<Далее скрипт создающий поле в таблице, например:>>
     ALTER TABLE mm.table ADD COLUMN newcolumn BOOLEAN;
     ALTER TABLE mm.table ALTER COLUMN newcolumn SET DEFAULT false;
     COMMENT ON COLUMN mm.table.newcolumn IS 'comment';
  END IF;
END;
$$

Добавление параметров в MM.ADJ для скриптов обновления БД

Пример кода, проверяющий наличие параметра в mm.adj и при его отсутствии создающий его (SEC_NAME-имя секции, PARAM_NAME-название параметра, comment-описание параметра):

DO
$$
BEGIN
IF NOT EXISTS (SELECT id from mm.adj where section='SEC_NAME' and "key"='PARAM_NAME' )
THEN
  INSERT INTO mm.adj ("section", "key", "value", "note")
  VALUES ('SEC_NAME', 'PARAM_NAME', '0', 'comment');
END IF;
END;
$$


Данные в таблицах, которые должны быть одинаковыми на всех БД

  • mm.app_tab - справочник закладок
  • mm.rght - только первые 1000 записей, остальные все одинаковые
  • mm.rsf_ref_column - колонки по реестру счетом
  • audit.table_conf - назначение мест аудита для таблиц

Проблема транзакции в регистратуре

Следующие таблицы находятся в эксклюзивной блокировке:

  • ambticket
  • ambdoc
  • company_insur
  • idoc
  • idoc_tepe
  • pay_type
  • naz
  • naz_dict
  • mdoc
  • mdoc_type
  • people
  • pinfo
  • place_mdoc
  • xpass
  • sex
  • type_programm

Любые изменения структуры (в том числе триггеры) будут висеть. Также будут висеть при измении таблиц, связанных constraint.

Разрабатываемая система (Нефедов)

Этот раздел устарел!!!

Для выполнения пакетов обновления (подготовленных для удалённого выполнения) без наличия подключения к БД заказчиков можно использовать файл aUpdateIBIS.exe Этот файл облегчит процесс выполнения обновления для удалённых администраторов системы. Поэтому его нужно отправлять на объект вместе с запакованным 7zip или распакованным (в виде папки) архивом.

Когда администратор запустит aUpdateIBIS.exe, появится окно с просьбой - указать местонахождение директории из которой запускается система ИБИС. После того как директория будет указана, этот файл запустит A1IBIS.exe с параметром /runupd="путь к архиву обновления". При этом путь к архиву обновления будет сформирован автоматически.

В архиве (запакованном или распакованном) ОБЯЗАТЕЛЬНО должен находиться файл UPDATE.INI Cодержимое файла UPDATE.INI может быть таким:

[ORDER]
2=russian.lng
1=7za.dll
[PATH]
russian.lng=test
7za.dll=test

В разделе ORDER указывается порядок обновляемых файлов, а в разделе PATH указывается название директории в которую A1IBIS.exe будет выкачивать файл. Наличие названий директорий в разделе PATH - не обязательно.

Исходники aUpdateIBIS.exe лежат тут: trunk/ER3/Source/!Updater

PS. Далее хотел бы добавить возможность, кроме файлов системы добавлять файлы скриптов (для их выполнения).