Обновление CRM системы
В Iris CRM начиная с версии 3.1 встроен раздел Администрирование→Обновление. Он предназначен для упрощения процесса обновления системы до последней версии.
Важно отметить, что обновление возможно выполнить двумя способами.
Перенос данных из старой (рабочей) базы в новую
Перенести информацию и структуру базы из старой базы в новую. Этим способом предпочтительно пользоваться, если Вы не делали значимых изменений базы, не меняли справочников и размер Вашей базы не велик.
В чем заключается обновление
Небольшое теоретическое отступление.
При обновлении системы необходимо обновить файлы системы и базу данных.
Сложность заключается в том, что в Вашей версии CRM системы и в версии, до которой Вы решили обновиться, может быть различная структура базы данных и могут различаться файлы конфигурации.
Таким образом, при обновлении необходимо решить следующие задачи в следующем порядке.
- Создать резервные копии базы данных и файлов системы.
- Создать новую базу данных для новой версии CRM системы.
- Синхронизировать структуру базы данных (перенести дополнительные таблицы и колонки из рабочей базы в новую).
- Перенести данные из рабочей базы в новую.
- Перенести изменения файлов конфигурации из рабочей базы в новую.
Чтобы упростить эти действия, в систему встроен раздел Администрирование→Обновление, который автоматизирует этапы 3 и 4.
Выполняем обновление
Для выполнения обновления выполните следующие действия.
- Резервная копия.
- Обязательно создайте резервные копии базы данных и файлов системы.
- Скопируйте файлы Вашей системы в другую папку или переименуйте папку с файлами системы. По умолчанию файлы системы лежат в папке c:\Program Files\Iris CRM\htdocs\iriscrm, в этом случае переименуйте папку iriscrm, например, в папку iriscrm-old.
- Разворачиваем новую версию.
- Создайте новую базу данных и разверните в нее резервную копию базы новой версии системы.
- Скопируйте файлы новой версии системы в папку, куда была ранее установлена CRM система. По умолчанию это папка c:\Program Files\Iris CRM\htdocs\iriscrm.
- Пропишите настройки соединения с новой базой данных (файл /admin/settings/settings.xml).
- Выполняем обновление базы данных.
- Заходим в новую версию CRM системы по той же ссылке, по какой входили в рабочую версию системы (по умолчанию http://localhost/iriscrm).
- Переходим в раздел Администрирование→Обновление.
- Указываем параметры соединения с рабочей (старой) базой данных.
- Нажимаем кнопку Выполнить обновление.
- Скачиваем SQL скрипт, который сгенерировала система.
- Запускаем этот SQL скрипт в утилите pgAdmin, выполняем его на новой базе данных. Этот скрипт синхронизирует структуру БД и переносит данные из рабочей базы в новую.
- Если Вы меняли или добавляли триггеры или функции базы данных, то их необходимо перенести из рабочей базы в новую вручную.
- Если Вы не меняли файлы конфигурации (папка /config), то на для Вас обновление на этом можно считать завершенным. Иначе необходимо выполненные изменения перенести в новую версию системы.
На этом обновление завершено. Теперь по прежнему адресу находится новая версия системы с Вашими рабочими данными.
Перенос структуры данных из новой базы в старую (рабочую)
Перенести структуру базы данных и необходимую информацию из новой базы в старую. Используйте этот способ, если у Вас объемная база или если Вы меняли справочники.
В чем заключается обновление
Небольшое теоретическое отступление.
При обновлении системы необходимо обновить файлы системы и базу данных.
Сложность заключается в том, что в Вашей версии CRM системы и в версии, до которой Вы решили обновиться, может быть различная структура базы данных и могут различаться файлы конфигурации.
Таким образом, при обновлении необходимо решить следующие задачи в следующем порядке.
- Создать резервные копии базы данных и файлов системы.
- Создать новую базу данных новой версии CRM системы.
- Синхронизировать структуру базы данных (перенести дополнительные таблицы и колонки из новой базы в рабочую).
- Перенести только необходимые данные из новой базы в рабочую.
- Перенести изменения файлов конфигурации из новой базы в рабочую.
Чтобы упростить эти действия, в систему встроен раздел Администрирование→Обновление, который автоматизирует этапы 3 и 4.
Выполняем обновление
Для выполнения обновления выполните следующие действия.
- Резервная копия.
- Обязательно создайте резервные копии базы данных и файлов системы.
- Скопируйте файлы Вашей системы в другую папку или переименуйте папку с файлами системы. По умолчанию файлы системы лежат в папке c:\Program Files\Iris CRM\htdocs\iriscrm, в этом случае переименуйте папку iriscrm, например, в папку iriscrm-old.
- Разворачиваем новую версию.
- Создайте новую базу данных и разверните в нее резервную копию базы новой версии системы.
- Скопируйте файлы новой версии системы в папку, куда была ранее установлена CRM система. По умолчанию это папка c:\Program Files\Iris CRM\htdocs\iriscrm.
- Пропишите настройки соединения с новой базой данных (файл /admin/settings/settings.xml).
- Выполняем обновление базы данных.
- Заходим в новую версию CRM системы по той же ссылке, по какой входили в рабочую версию системы (по умолчанию http://localhost/iriscrm).
- Переходим в раздел Администрирование→Обновление.
- Указываем параметры соединения с рабочей (старой) базой данных.
- Нажимаем кнопку Выполнить обновление. Указываем, что мы находимся в новой базе и переносим данные из новой базы в старую.
- Скачиваем SQL скрипт, который сгенерировала система.
- Запускаем этот SQL скрипт в утилите pgAdmin, выполняем его на старой (рабочей) базе данных. Этот скрипт синхронизирует структуру БД и переносит данные из новой базы в старую (рабочую). При выполнении скрипта могут возникнуть ошибки. Удалите или закомментируйте строки, на которых возникают ошибки и попробуйте выполнить скрипт снова.
- Обратите внимание на функции БД и триггеры. Если в новой версии есть новые функции или триггеры, то их необходимо перенести в рабочую БД вручную.
- Если Вы не меняли файлы конфигурации (папка /config), то на для Вас обновление на этом можно считать завершенным. Иначе необходимо выполненные изменения перенести в новую версию системы.
На этом обновление завершено. Теперь по прежнему адресу находится новая версия системы с Вашими рабочими данными.
Решение возможных проблем
Возможные проблемы и способы их решения.
При создании скрипта обновления появляется следующее сообщение.
База _____: ERROR: отношение "iris_answer_comment" не существует.
Причина. В физической структуре БД такая таблица отсутствует, а в мета записях она еще не удалена.
Решение. Удалите эту таблицу из раздела Таблицы и Группы таблиц. Зайдите в Вашу рабочую версию системы в раздел Администрирование→Группы таблиц. Выберите группу таблиц Решения и удалите из этой группы таблиц таблицу iris_answer_comment. Зайдите в раздел Администрирование→Таблицы и удалите таблицу iris_answer_comment.
Для удаления также можно воспользоваться скриптом.
DELETE FROM iris_table_tablegroup WHERE tableid IN (SELECT id FROM iris_table WHERE code='iris_answer_comment'); DELETE FROM iris_table WHERE code='iris_answer_comment';
-
При подготовке скрипта обновления базы возникает следующее сообщение.
База _____: ERROR: отношение "iris_table_column" не существует.
Причина. В рабочей базе нет таблицы iris_table_column.
Решение. Добавить и заполнить таблицу iris_table_column. В этой таблице содержится описание всех колонок системы. В системе порядка 200 таблиц. В каждой таблице в среднем по 10 колонок. Вручную заполнять эту таблицу не целесообразно. Для автоматического создания и заполнения этой таблицы выполните скрипт из pgAdmin.
Скрипт для создания и заполнения iris_table_column.
-- Table: iris_columntype -- DROP TABLE iris_columntype; CREATE TABLE iris_columntype ( id character varying(36) NOT NULL, createid character varying(36), -- Автор createdate timestamp without time zone, -- Дата создания modifyid character varying(36), -- Изменил modifydate timestamp without time zone, -- Дата изменения "name" character varying(250) NOT NULL, -- Название code character varying(250), -- Код (тип колонки в БД) description character varying(1000), -- Описание CONSTRAINT pk_iris_columntype PRIMARY KEY (id) ); COMMENT ON TABLE iris_columntype IS 'Типы колонок'; COMMENT ON COLUMN iris_columntype.createid IS 'Автор'; COMMENT ON COLUMN iris_columntype.createdate IS 'Дата создания'; COMMENT ON COLUMN iris_columntype.modifyid IS 'Изменил'; COMMENT ON COLUMN iris_columntype.modifydate IS 'Дата изменения'; COMMENT ON COLUMN iris_columntype."name" IS 'Название'; COMMENT ON COLUMN iris_columntype.code IS 'Код (тип колонки в БД)'; COMMENT ON COLUMN iris_columntype.description IS 'Описание'; -- Index: iris_columntype_pk_i -- DROP INDEX iris_columntype_pk_i; CREATE UNIQUE INDEX iris_columntype_pk_i ON iris_columntype USING btree (id); -- Table: iris_table_column -- DROP TABLE iris_table_column; CREATE TABLE iris_table_column ( id character varying(36) NOT NULL, createid character varying(36), -- Автор createdate timestamp without time zone, -- Дата создания modifyid character varying(36), -- Изменил modifydate timestamp without time zone, -- Дата изменения tableid character varying(36), -- Таблица "name" character varying(250), -- Название колонки code character varying(250), -- Код колонки (название в БД) columntypeid character varying(36), -- Тип колонки description character varying(1000), -- Комментарий defaultvalue character varying(250), -- По умолчанию fkname character varying(250), -- Название внешнего ключа fktableid character varying(36), -- Таблица внешнего ключа --iscascade character varying(1), -- Каскадное удаление CONSTRAINT pk_iris_table_column PRIMARY KEY (id), CONSTRAINT fk_iris_table_column_columntypeid FOREIGN KEY (columntypeid) REFERENCES iris_columntype (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_iris_table_column_fktableid FOREIGN KEY (fktableid) REFERENCES iris_table (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_iris_table_column_tableid FOREIGN KEY (tableid) REFERENCES iris_table (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ); COMMENT ON TABLE iris_table_column IS 'Колонки таблицы'; COMMENT ON COLUMN iris_table_column.createid IS 'Автор'; COMMENT ON COLUMN iris_table_column.createdate IS 'Дата создания'; COMMENT ON COLUMN iris_table_column.modifyid IS 'Изменил'; COMMENT ON COLUMN iris_table_column.modifydate IS 'Дата изменения'; COMMENT ON COLUMN iris_table_column.tableid IS 'Таблица'; COMMENT ON COLUMN iris_table_column."name" IS 'Название колонки'; COMMENT ON COLUMN iris_table_column.code IS 'Код колонки (название в БД)'; COMMENT ON COLUMN iris_table_column.columntypeid IS 'Тип колонки'; COMMENT ON COLUMN iris_table_column.description IS 'Комментарий'; COMMENT ON COLUMN iris_table_column.defaultvalue IS 'По умолчанию'; COMMENT ON COLUMN iris_table_column.fkname IS 'Название внешнего ключа'; COMMENT ON COLUMN iris_table_column.fktableid IS 'Таблица внешнего ключа'; --COMMENT ON COLUMN iris_table_column.iscascade IS 'Каскадное удаление'; -- Index: iris_table_column_fk_i -- DROP INDEX iris_table_column_fk_i; CREATE INDEX iris_table_column_fk_i ON iris_table_column USING btree (columntypeid); -- Index: iris_table_column_fk_i2 -- DROP INDEX iris_table_column_fk_i2; CREATE INDEX iris_table_column_fk_i2 ON iris_table_column USING btree (tableid); -- Index: iris_table_column_fk_i3 -- DROP INDEX iris_table_column_fk_i3; CREATE INDEX iris_table_column_fk_i3 ON iris_table_column USING btree (fktableid); -- Index: iris_table_column_pk_i -- DROP INDEX iris_table_column_pk_i; CREATE UNIQUE INDEX iris_table_column_pk_i ON iris_table_column USING btree (id); -- Добавим данные о новых таблицах -- Таблица "Колонки" INSERT INTO iris_table (id, createid, createdate, modifyid, modifydate, name, code, description, is_access) VALUES ('c0c2de54-8d22-6731-ebb5-96bb0040cad9', NULL, NULL, NULL, NULL, 'Колонки таблицы', 'iris_table_column', NULL, '0'); -- таблица "Типы колонок таблицы" INSERT INTO iris_table (id, createid, createdate, modifyid, modifydate, name, code, description, is_access) VALUES ('bab891d2-ef44-7865-31ac-85886c9376c2', NULL, NULL, NULL, NULL, 'Типы колонок таблицы', 'iris_columntype', NULL, '0'); -- добавим таблицу "Типы колонок" в группу таблиц "Справочники" INSERT INTO iris_table_tablegroup (id, createid, createdate, modifyid, modifydate, tablegroupid, tableid) VALUES (iris_genguid(), NULL, NULL, NULL, NULL, '636beb30-f4c4-3755-b407-4259fa7f12dc', 'bab891d2-ef44-7865-31ac-85886c9376c2'); -- В группу таблиц "Группа таблиц" INSERT INTO iris_table_tablegroup (id, createid, createdate, modifyid, modifydate, tablegroupid, tableid) VALUES ('18ab97d7-71ce-923d-4ead-435afee65a87', NULL, NULL, NULL, NULL, 'f0cbb42d-0279-3a79-bac9-f198ccc3d63e', 'c0c2de54-8d22-6731-ebb5-96bb0040cad9'); -- Вставка начальных значений INSERT INTO iris_columntype (id, "name", code, description) VALUES('84b8ce3d-2737-f6f1-1a30-a75f7e66a6d2', 'Строка (30)', 'character varying(30)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('b9a77e4a-5714-e160-ba16-16695cff3d1e', 'Строка (50)', 'character varying(50)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('7c6eba80-2a51-bb27-53d7-a40f00f3d024', 'Символ', 'character varying(1)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('332cb042-111b-3598-4458-7b36a1d0b67f', 'Строка (250)', 'character varying(250)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('8e1d85be-6230-4c6f-6905-1aa87d25fa98', 'Строка (1000)', 'character varying(1000)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('8a51f105-3368-0c76-68b7-26fa32f3c8b5', 'Текст', 'text', 'Желательно не использовать этот тип'); INSERT INTO iris_columntype (id, "name", code, description) VALUES('687bc1a7-de12-ab78-11bd-6936d9a9ff75', 'Малое целое', 'smallint', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('21622686-9ef9-b601-eb81-18b5aa8634b5', 'Целое', 'integer', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('527880f1-eeb9-4bb3-7359-c0f6b8dfc942', 'Дробное (10, 2)', 'numeric(10,2)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('9ab5af8c-0984-f1d3-53cd-ff3901ac72b1', 'GUID', 'character varying(36)', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('c6676f47-8cc8-e9b4-c71b-74576f4d1ffe', 'Дата', 'date', ''); INSERT INTO iris_columntype (id, "name", code, description) VALUES('666d5a4e-6064-9286-a921-e7957d39d283', 'Дата-время', 'timestamp without time zone', ''); ALTER TABLE iris_table_column ADD COLUMN isprimary character varying(1); COMMENT ON COLUMN iris_table_column.isprimary IS 'Первичный ключ'; CREATE TABLE iris_constraintaction ( id character varying(36) NOT NULL, createid character varying(36), -- Автор createdate timestamp without time zone, -- Дата создания modifyid character varying(36), -- Изменил modifydate timestamp without time zone, -- Дата изменения "name" character varying(250) NOT NULL, -- Название code character varying(250), -- Код (действие в БД) description character varying(1000), -- Описание CONSTRAINT pk_iris_constraintaction PRIMARY KEY (id) ); COMMENT ON TABLE iris_constraintaction IS 'Типы колонок'; COMMENT ON COLUMN iris_constraintaction.createid IS 'Автор'; COMMENT ON COLUMN iris_constraintaction.createdate IS 'Дата создания'; COMMENT ON COLUMN iris_constraintaction.modifyid IS 'Изменил'; COMMENT ON COLUMN iris_constraintaction.modifydate IS 'Дата изменения'; COMMENT ON COLUMN iris_constraintaction."name" IS 'Название'; COMMENT ON COLUMN iris_constraintaction.code IS 'Код (действие в БД)'; COMMENT ON COLUMN iris_constraintaction.description IS 'Описание'; -- Добавим данные о новых таблицах -- таблица "Действия для внешних ключей" INSERT INTO iris_table (id, createid, createdate, modifyid, modifydate, name, code, description, is_access) VALUES ('396ac611-c244-60a4-027e-5f7cb82fc2a0', NULL, NULL, NULL, NULL, 'Действия для внешних ключей', 'iris_constraintaction', NULL, '0'); -- добавим таблицу "Действия для внешних ключей" в группу таблиц "Справочники" INSERT INTO iris_table_tablegroup (id, createid, createdate, modifyid, modifydate, tablegroupid, tableid) VALUES (iris_genguid(), NULL, NULL, NULL, NULL, '636beb30-f4c4-3755-b407-4259fa7f12dc', '396ac611-c244-60a4-027e-5f7cb82fc2a0'); -- Вставка начальных значений INSERT INTO iris_constraintaction (id, "name", code, description) VALUES('762f2d30-bd6b-00a7-2832-dbfb5a6302c8', 'Нет проверки', 'NO ACTION', ''); INSERT INTO iris_constraintaction (id, "name", code, description) VALUES('9f8bccc8-923a-3e15-6484-f7f4168294b2', 'Проверка целостности', 'RESTRICT', ''); INSERT INTO iris_constraintaction (id, "name", code, description) VALUES('43d1f9a8-ce2f-c342-7d67-46c6d497949d', 'Каскадное', 'CASCADE', ''); INSERT INTO iris_constraintaction (id, "name", code, description) VALUES('87f7090d-72c3-616e-ed53-31a1548e91c1', 'Установить пусто', 'SET NULL', ''); INSERT INTO iris_constraintaction (id, "name", code, description) VALUES('9b8a597c-b302-5703-4677-829e61df3a0c', 'Установить по умолчанию', 'SET DEFAULT', ''); ALTER TABLE iris_table_column ADD COLUMN ondeleteid character varying(36); COMMENT ON COLUMN iris_table_column.ondeleteid IS 'Действие при удалении'; ALTER TABLE iris_table_column ADD COLUMN onupdateid character varying(36); COMMENT ON COLUMN iris_table_column.onupdateid IS 'Действие при обновлении'; ALTER TABLE iris_table_column ADD CONSTRAINT fk_iris_table_column_ondeleteid FOREIGN KEY (ondeleteid) REFERENCES iris_constraintaction (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT; ALTER TABLE iris_table_column ADD CONSTRAINT fk_iris_table_column_onupdateid FOREIGN KEY (onupdateid) REFERENCES iris_constraintaction (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT; CREATE INDEX iris_table_column_fk_i4 ON iris_table_column USING btree (ondeleteid); CREATE INDEX iris_table_column_fk_i5 ON iris_table_column USING btree (onupdateid); ALTER TABLE iris_table_column ADD COLUMN isnotnull smallint; COMMENT ON COLUMN iris_table_column.isnotnull IS 'Не пустое'; ALTER TABLE iris_table_column ADD COLUMN "default" character varying(250); COMMENT ON COLUMN iris_table_column."default" IS 'По умолчанию'; ALTER TABLE iris_table_column ADD COLUMN pkname character varying(250); COMMENT ON COLUMN iris_table_column.pkname IS 'Название первичного ключа'; ALTER TABLE iris_table_column ADD COLUMN indexname character varying(250); COMMENT ON COLUMN iris_table_column.indexname IS 'Название индекса'; --Автозаполнение колонок - начало DELETE FROM iris_table_column; INSERT INTO iris_table_column(id, code, tableid, columntypeid, "name", isnotnull, defaultvalue, fkname, fktableid, ondeleteid, onupdateid, isprimary, pkname, indexname) SELECT iris_genguid(), a.attname, (SELECT id FROM iris_table WHERE code=c.relname), (SELECT id FROM iris_columntype WHERE code=format_type(a.atttypid, a.atttypmod)), (SELECT description FROM pg_description WHERE objoid=c.oid AND objsubid=a.attnum), CASE WHEN a.attnotnull THEN 1 ELSE 0 END AS fields_not_null, (SELECT adsrc FROM pg_attrdef WHERE adrelid=c.oid AND adnum=a.attnum), (SELECT c0.conname FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' ), (SELECT id FROM iris_table WHERE code= (SELECT p2.relname AS table2 FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), (SELECT id FROM iris_constraintaction WHERE code= (SELECT case when c0.confdeltype = 'r' then 'RESTRICT' when c0.confdeltype = 'd' then 'SET DEFAULT' when c0.confdeltype = 'a' then 'NO ACTION' when c0.confdeltype = 'c' then 'CASCADE' when c0.confdeltype = 'n' then 'SET NULL' else '' end FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), (SELECT id FROM iris_constraintaction WHERE code= (SELECT case when c0.confupdtype = 'r' then 'RESTRICT' when c0.confupdtype = 'd' then 'SET DEFAULT' when c0.confupdtype = 'a' then 'NO ACTION' when c0.confupdtype = 'c' then 'CASCADE' when c0.confupdtype = 'n' then 'SET NULL' else '' end FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), case when a.attname='id' then 1 else 0 end, (SELECT c0.conname--, p1.relname, a1.attname FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_attribute a1 WHERE c0.contype = 'p' AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'id' ), ( SELECT relname--, attname--, indkey FROM pg_class, pg_index, pg_attribute WHERE pg_class.oid = pg_index.indexrelid AND pg_class.oid IN ( SELECT indexrelid--, relname FROM pg_index, pg_class WHERE pg_class.relname=c.relname--'iris_account' AND pg_class.oid=pg_index.indrelid -- AND indisunique != 't' AND indisprimary != 't' AND indnatts != 2 ) AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attname = a.attname--'id' ) FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid, pg_attribute a WHERE (n.nspname = 'public' OR n.oid IS NULL) AND a.attrelid = c.oid AND c.relname IN (SELECT code FROM iris_table) --'iris_account' AND a.attnum > 0 AND NOT a.attname LIKE '%pg.dropped.%' --Автозаполнение колонок - конец
-
При выполнении подготовленного скрипта возникает следующая ошибка.
ERROR: ошибка синтаксиса в или рядом ";" LINE __: ALTER TABLE iris_pact ADD COLUMN "term" ;
Причина. При подготовке SQL скрипта не было найдено подходящего типа для колонки в таблице iris_ColumnType (справочник Типы колонок таблиц).
Решение. Добавьте нужный тип в таблицу iris_ColumnType (справочник Типы колонок таблиц), повторите создание скрипта и повторите попытку выполнения скрипта. Либо самостоятельно подкорректируйте SQL скрипт.
-
При выполнении подготовленного скрипта возникает следующая ошибка.
ERROR: insert or update on table "iris_account" violates foreign key constraint "fk_iris_account_accountfaceid" DETAIL: Ключ (accountfaceid)=(3f2afaf5-d1e7-774e-4f07-d6def4f84fda) отсутствует в таблице "iris_accountface".
Причина. В рабочей базе не было обнаружено описание таблицы iris_accountface. Поэтому из нее не были перенесены данные в новую базу. И при вставке значений в таблицу компаний нарушается ссылочная целостность.
Решение. Добавьте в разделе Администрирование→Таблицы таблицу iris_accountface.
Или выполните следующий скрипт.
INSERT INTO iris_table (id, name, code) VALUES (iris_genguid(), 'Лицо', 'iris_accountface'); --INSERT INTO iris_table (id, name, code) VALUES (iris_genguid(), 'Статусы компаний', 'iris_accountstate'); --INSERT INTO iris_table (id, name, code) VALUES (iris_genguid(), 'Категори компаний', 'iris_category');
Сразу проверьте, скорее всего у Вас не описаны также таблицы iris_accountstate, iris_category.
После этого необходимо заново сформировать описание колонок.
Для этого выполните следующий скрипт.
--Автозаполнение колонок - начало DELETE FROM iris_table_column; INSERT INTO iris_table_column(id, code, tableid, columntypeid, "name", isnotnull, defaultvalue, fkname, fktableid, ondeleteid, onupdateid, isprimary, pkname, indexname) SELECT iris_genguid(), a.attname, (SELECT id FROM iris_table WHERE code=c.relname), (SELECT id FROM iris_columntype WHERE code=format_type(a.atttypid, a.atttypmod)), (SELECT description FROM pg_description WHERE objoid=c.oid AND objsubid=a.attnum), CASE WHEN a.attnotnull THEN 1 ELSE 0 END AS fields_not_null, (SELECT adsrc FROM pg_attrdef WHERE adrelid=c.oid AND adnum=a.attnum), (SELECT c0.conname FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' ), (SELECT id FROM iris_table WHERE code= (SELECT p2.relname AS table2 FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), (SELECT id FROM iris_constraintaction WHERE code= (SELECT case when c0.confdeltype = 'r' then 'RESTRICT' when c0.confdeltype = 'd' then 'SET DEFAULT' when c0.confdeltype = 'a' then 'NO ACTION' when c0.confdeltype = 'c' then 'CASCADE' when c0.confdeltype = 'n' then 'SET NULL' else '' end FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), (SELECT id FROM iris_constraintaction WHERE code= (SELECT case when c0.confupdtype = 'r' then 'RESTRICT' when c0.confupdtype = 'd' then 'SET DEFAULT' when c0.confupdtype = 'a' then 'NO ACTION' when c0.confupdtype = 'c' then 'CASCADE' when c0.confupdtype = 'n' then 'SET NULL' else '' end FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_class p2, pg_attribute a1, pg_attribute a2 WHERE c0.contype = 'f' AND c0.confrelid > 0 AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.confrelid = p2.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND c0.confrelid = a2.attrelid AND a2.attnum = ANY (c0.confkey) AND n0.nspname = 'public' AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'cityid' )), case when a.attname='id' then 1 else 0 end, (SELECT c0.conname--, p1.relname, a1.attname FROM pg_constraint c0, pg_namespace n0, pg_class p1, pg_attribute a1 WHERE c0.contype = 'p' AND c0.connamespace = n0.oid AND c0.conrelid = p1.oid AND c0.conrelid = a1.attrelid AND a1.attnum = ANY (c0.conkey) AND p1.relname = c.relname --'iris_account' AND a1.attname = a.attname --'id' ), ( SELECT relname--, attname--, indkey FROM pg_class, pg_index, pg_attribute WHERE pg_class.oid = pg_index.indexrelid AND pg_class.oid IN ( SELECT indexrelid--, relname FROM pg_index, pg_class WHERE pg_class.relname=c.relname--'iris_account' AND pg_class.oid=pg_index.indrelid -- AND indisunique != 't' AND indisprimary != 't' AND indnatts != 2 ) AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attname = a.attname--'id' ) FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid, pg_attribute a WHERE (n.nspname = 'public' OR n.oid IS NULL) AND a.attrelid = c.oid AND c.relname IN (SELECT code FROM iris_table) --'iris_account' AND a.attnum > 0 AND NOT a.attname LIKE '%pg.dropped.%' --Автозаполнение колонок - конец
После этого из раздела Обновление заново создайте SQL скрипт и снова попытайтесь выполнить его в pgAdmin.
-
При выполнении подготовленного SQL скрипта возникает следующая ошибка.
ERROR: duplicate key value violates unique constraint "iris_contact_access_ROLE_UK"
Причина. В новой базе созданы пользователи и к некоторым записям они указаны в правах доступа. При добавлении новых записей во вкладки Доступ нарушаются ограничения целостности.
Решение. Удалите записи из вкладок Доступ в новой базе.
Для этого можно выполнить следующий скрипт.
DELETE FROM iris_account_access; DELETE FROM iris_contact_access; DELETE FROM iris_report_access; DELETE FROM iris_printform_access;
-
При выполнении подготовленного SQL скрипта возникает следующая ошибка.
ERROR: колонка "isremind" содержит значения NULL
Причина. При переносе данных в новой базе сначала снимаются ограничения
NOT NULLи после переноса данных эти ограничения возвращаются. Если появилась такая ошибка, то это значит, что в рабочей базе не все обязательные данные были заполнены.Решение. Заполните данные в рабочей базе и повторите процедуру обновления. Либо закомментируйте строки SQL запроса, в которых возникает ошибка. После выполнения запроса заполните в новой базе необходимые поля и повторите попытку выполнения не выполнившихся строк запроса.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
-
