powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Копирование объекта
7 сообщений из 7, страница 1 из 1
Копирование объекта
    #38769967
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При копировании таблицы не копируются описания полей и самой таблицы.
...
Рейтинг: 0 / 0
Копирование объекта
    #38774040
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описания полей точно не копируются? У меня копируются.
Копирования описания таблицы в коде блока действительно нет, это поправлю.
...
Рейтинг: 0 / 0
Копирование объекта
    #38775765
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertОписания полей точно не копируются?Точно.
Порядок действий
Создаю таблицу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table t1(
  f1 int,
  f2 int);

commit;

comment on table t1 is 'Тестовая таблица';
COMMENT ON COLUMN T1.F1 IS 'Поле F1';
COMMENT ON COLUMN T1.F2 IS 'Поле F2';

commit;

Запускаю процесс копирования T1->T2 в ту же БД. Все галки отмечены.
Получаю на выходе T2 с такой структурой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/******************************************************************************/
/***                Generated by IBExpert 14.10.2014 8:03:43                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE T2 (
    F1  INTEGER,
    F2  INTEGER
);




/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/


/* Privileges of users */
GRANT ALL ON T2 TO DB_OWNER WITH GRANT OPTION;

В прикрепленном файле скрипт, сгенерированный экспертом.

FB3, IBExpert 2014.10.11.1
...
Рейтинг: 0 / 0
Копирование объекта
    #38775772
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Протокол выполнения показывает, что имеются ошибки.

протокол
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Connecting to localhost:shf... Successful.
Connecting to localhost:shf... Successful.
Collecting fields info...
Creating table "T2"... Successful. FAILED!
Copying table data...
    Totally 0 records copied.
Collecting triggers info...
Analyzing trigger bodies for used generators...
Creating or/and initting generators...
Creating triggers...
Creating indices...
Closing connection to localhost:shf...
Closing connection to localhost:shf...
Finished.
Total time spent: 0.297 seconds
That's all, folks!


И похоже, как раз на этапе обновления системных таблиц:

Код: plaintext
1.
update rdb$relation_fields set rdb$description = :FldComment
                 where (rdb$relation_name = :TblName) and (rdb$field_name = :FldName);

FB3 не пропускает такую операцию.
Если руками попробовать выполнить, получаем отлуп.

Код: plaintext
1.
2.
3.
4.
5.
update rdb$relation_fields set rdb$description = 'Тест'
                 where (rdb$relation_name = 'T2') and (rdb$field_name = 'F1');

Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
UPDATE operation is not allowed for system table RDB$RELATION_FIELDS.
...
Рейтинг: 0 / 0
Копирование объекта
    #38775777
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трассировка показывает, что да, обламывается на UPDATE rdb$relation_fields:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Statement 760:
-------------------------------------------------------------------------------
UPDATE rdb$relation_fields set rdb$description =  ?   where (rdb$relation_name =  ?   ) and (rdb$field_name =  ?   )

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (RDB$RELATION_FIELDS INDEX (RDB$INDEX_15))

param0 = blob, "0000000000000001"
param1 = varchar(124), "T2"
param2 = varchar(124), "F1"


2014-10-14T09:52:32.5710 (3120:070AF260) ERROR AT JStatement::execute
    shf (ATT_336, SHF_OWNER:NONE, UTF8, TCPv4:127.0.0.1)
    C:\Program Files\HK-Software\IBExpert\IBExpert.exe:4012
335545030 : UPDATE operation is not allowed for system table RDB$RELATION_FIELDS
...
Рейтинг: 0 / 0
Копирование объекта
    #38775780
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под тройку там еще ничего не затачивалось.
...
Рейтинг: 0 / 0
Копирование объекта
    #38775827
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в тройке запрещены правки многих системных таблиц. К сожалению ещё не всех. А потому в данной ситуации надо использовать оператор COMMENT ON.

Т.е. вместо этого

Код: sql
1.
2.
update rdb$relation_fields set rdb$description = 'Тест'
                 where (rdb$relation_name = 'T2') and (rdb$field_name = 'F1');



должно быть

Код: sql
1.
COMMENT ON COLUMN T2.F1 IS 'Тест';
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Копирование объекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]