Замена sub_type и segment_length blob полей

Модераторы: kdv, CyberMax

Ответить
sergei7
Сообщения: 7
Зарегистрирован: 11 мар 2009, 17:00

Замена sub_type и segment_length blob полей

Сообщение sergei7 » 01 апр 2011, 15:36

Сервер FB1.5. В БД существует ряд таблиц с BLOB полями с разными типами и длинами сегментов, но предназначенные для хранения бинарных объектов (документы msword). Хочу привести базу в порядок (в последствии портировать на FB2.5). Создаю домен CREATE DOMAIN TTEXT AS BLOB SUB_TYPE 1. Пытаюсь привести существующие типы столбцов (BLOB) таблиц к домену TTEXT.
Т.е. по сути: задача изменить SUB_TYPE и segment_length blob поля в уже работающей базе.

Конструкция
ALTER TABLE TABLE_NAME ALTER COLUMN FIELD_NAME TYPE DOMEN_NAME
не применима к BLOB полям.

Вопрос: допустима ли "прямая" модификация системных таблиц?
update RDB$RELATION_FIELDS set RDB$FIELD_SOURCE = DOMEN_NAME where (RDB$FIELD_NAME = FIELD_NAME) and RDB$RELATION_NAME = TABLE_NAME

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Замена sub_type и segment_length blob полей

Сообщение kdv » 01 апр 2011, 16:57

системные таблицы лучше не ковырять.
Если вы храните двоичные данные, то SUB_TYPE блоба должен быть 0, потому как подтип 1 в Firebird 2.1 или 2.5 уже конвертируется между чарсетами (раньше конвертации фактически не было).
То есть, в блобы подтипа 1 можно класть только голый текст, txt файлы, html-страницы, и т.д. Но не документы msword. Это не текст, собственно.

sergei7
Сообщения: 7
Зарегистрирован: 11 мар 2009, 17:00

Re: Замена sub_type и segment_length blob полей

Сообщение sergei7 » 01 апр 2011, 21:35

kdv писал(а):системные таблицы лучше не ковырять.
Жаль! Это сильно все усложнит :(
kdv писал(а):Если вы храните двоичные данные, то SUB_TYPE блоба должен быть 0, потому как подтип 1 в Firebird 2.1 или 2.5 уже конвертируется между чарсетами (раньше конвертации фактически не было).
То есть, в блобы подтипа 1 можно класть только голый текст, txt файлы, html-страницы, и т.д. Но не документы msword. Это не текст, собственно.
Спасибо! Здесь я действительно ошибся с sub_type - он должен быть нулем а не единицей.

Из-за этого sub_type'а все и затевалось (подготовка к портированию на fb2.5) - в существующей базе sub_type (у блоб полей) находится в положительном диапазоне. Я правильно понимаю: замена только sub_type "через системные" таблицы также нежелательна?

Ответить