Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Копирование объекта / 7 сообщений из 7, страница 1 из 1
08.10.2014, 10:03
    #38769967
Энди Таккер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование объекта
При копировании таблицы не копируются описания полей и самой таблицы.
...
Рейтинг: 0 / 0
11.10.2014, 17:07
    #38774040
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование объекта
Описания полей точно не копируются? У меня копируются.
Копирования описания таблицы в коде блока действительно нет, это поправлю.
...
Рейтинг: 0 / 0
14.10.2014, 05:26
    #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
14.10.2014, 06:41
    #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
14.10.2014, 06:55
    #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
14.10.2014, 07:10
    #38775780
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование объекта
Под тройку там еще ничего не затачивалось.
...
Рейтинг: 0 / 0
14.10.2014, 09:17
    #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
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Копирование объекта / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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