Summary: | База не обновляется до Selta 1.0.3 | ||
---|---|---|---|
Product: | SELTA@Etersoft | Reporter: | Шильников Андрей <shan> |
Component: | Графическая утилита Selta | Assignee: | Vitaly Lipatov <lav> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P2 | CC: | andrey, goga, lav, pglushkov |
Version: | 1.0.3 | ||
Target Milestone: | версия 1.0.4 | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 2054 | ||
Attachments: |
ODBC-SQL.LOG
postgresql-2008-07-09.log Исправленный файл обновления корректный вариант от клиента предварительный исправленный вариант добавлен первычный ключ |
Description
Шильников Андрей
2008-07-09 16:51:15 MSD
Created attachment 564 [details]
ODBC-SQL.LOG
Created attachment 565 [details]
postgresql-2008-07-09.log
Ошибка критичная и решить ее надо как можно быстрее. В качестве временного решения можно предложить либо - выгрузить базу и загрузить её заново. либо - вручную запустить Scripts/selta_up_102_to_103.sql из каталога Selta для обновления. В утилите обновления невнятная диагностика. Вот выдержка из лога: Selta 848-468 EXIT SQLExecDirect with return code -1 (SQL_ERROR) HSTMT 00A22A08 UCHAR * 0x00222EFC [ -3] "!!-- Update SELTA@Etersoft v.1.0.2 to SELTA@Etersoft v.1.0.3 (102 to 103)\ a\ adrop table if exists pg_selta_version;\ acreate table pg_selta_version(num int, ver mvarchar);\ ainsert into pg_selta_version values (103, 'SELTA@Etersoft v.1.0.3');\ a\ a-- Remove all procedure from 1C\ aselect drop_function(name) from pg_func_names;\ a\ a\ 0" SDWORD -3 DIAG [HY000] internal RELEASE failed; ERROR: cannot EXECUTE a null querystring (8) Как раз тут расшифровывается ошибка 8. Сейчас попробую собрать новую сборку. Created attachment 566 [details]
Исправленный файл обновления
Пока нет новой сборки selta.msi
файл selta_up_102_to_103.sql нужно положить в
C:\Program Files\Selta\Scripts
Created attachment 577 [details]
корректный вариант от клиента
подробности в заявке 7319
"В файле, который я прислал как вариант решения, и я об этом писал, была хранимая процедура, подправленная мной на скорую руку. Я банально удалил строчку подчищающую таблицу pg_func_names. Это не есть правильно. Вечером того же дня я пересоздал процедуру и почистил эту таблицу от накопившегося мусора. Что касаемо обновления, то там надо либо в конце поставить повторное объявление процедуры с недостающей строчкой, либо создать временную табличку, куда "слить" названия очищаемых процедур, по ней произвести зачистку стандартной процедурой и затем удалить её. Можно конечно и с блокировками повозиться, но это уже думаю здесь избыточно. А вот процедуру пересоздавать придётся в любом варианте ибо без "IF EXISTS" оно работает хреново, ведь в таблице pg_func_names элементарно может быть мусор!" Короче, разберитесь пожалуйста, каким должен быть скрипт для обновления. Чтобы он корректно удалял то, что нам нужно, не мусорил и вообще работал. (In reply to comment #9) > Короче, разберитесь пожалуйста, каким > должен быть скрипт для обновления. > Чтобы он корректно удалял то, что нам нужно, > не мусорил и вообще работал. > хотелось бы узнать - или кому задавать вопросы типа "что для чего нужно и где лежит" ?? в скрипте от клиента 1. строчка 'DROP FUNCTION IF EXISTS ' проверяет на наличие функций для удаления 2. последняя строчка полностью чистит таблицу pg_func_names ошибка возникнет тогда, когда описанная DROP_FUNCTION будет использоваться вне скрипта и без последующего удаления записи о ф-ции в pg_func_names, удаленной с помощью DROP FUNCTION. в этом случае в pg_func_names будем иметь запись о несуществующей функции, что не есть хорошо отсюда вопрос: DROP_FUNCTION используется только в скрипте или вне его тоже? в скрипте от клиента 1. строчка 'DROP FUNCTION IF EXISTS ' проверяет на наличие функций для удаления 2. последняя строчка полностью чистит таблицу pg_func_names ошибка возникнет тогда, когда описанная DROP_FUNCTION будет использоваться вне скрипта и без последующего удаления записи о ф-ции в pg_func_names, удаленной с помощью DROP_FUNCTION. в этом случае в pg_func_names будем иметь запись о несуществующей функции, что не есть хорошо отсюда вопрос: DROP_FUNCTION используется только в скрипте или вне его тоже? странно что первый вариант скрипта у клиента не сработал(attachment id=566), у меня все заработало (проверял команды в скрипте "вручную" консолью, постгри на тестинге) отсюда оправданным видится только добавление "IF EXISTS" правильным решением будет объединить оба варианта + all_name проверять на NULL Created attachment 590 [details]
предварительный исправленный вариант
нужно протестить
(In reply to comment #15) > Created an attachment (id=590) [details] > предварительный исправленный вариант (заявка 6507) возможно еще нужно добавить индексы в таблицу pg_func_names, первичный ключ по полю name Created attachment 591 [details]
добавлен первычный ключ
осталось протестить на работоспособность
(In reply to comment #17) > добавлен первычный ключ > осталось протестить на работоспособность работает, можно включать в сборку 1. Юра, сейчас функция DELETE_FUNCTION из файла обновления до 1.0.3 отличается от функции в selta_install.sql. Надо определиться, где правильнее. 2. Бага по первичному ключу должна быть отдельно, и исправление должно входить не только в файл обновления, но и в selta_install.sql, который задействуется при инициализации базы. (In reply to comment #19) > 1. Юра, сейчас функция DELETE_FUNCTION из файла > обновления до 1.0.3 отличается от функции в > selta_install.sql. Надо определиться, где > правильнее. правильным будет второй вариант > 2. Бага по первичному ключу должна быть > отдельно, и исправление должно входить не > только в файл обновления, но и в selta_install.sql, > который задействуется при инициализации > базы. > создал, бага 2171 > правильным будет второй вариант
имеется ввиду вариант функции DROP_FUNCTION
из комментария #17
(In reply to comment #21) > > правильным будет второй вариант > > имеется ввиду вариант функции DROP_FUNCTION > из комментария #17 > этот же вариант функции должен быть и в selta_install.sql ? Ну всё, всё необходимое для обновления внесено в 1.0.4 |