Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как перенести BLOB поле в другой sbspace? / 7 сообщений из 7, страница 1 из 1
20.07.2012, 13:27
    #37886946
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
Возникла необходимость переноса существующих BLOB-данных в другой sbspace. Похоже, штатного решения типа ALTER FRAGMENT INIT in <another_sbspace> для BLOB-полей не существует (надеюсь, пока).
Думаю использовать следующий метод:
1. Создать новое поле
Код: sql
1.
ALTER TABLE tabname ADD newcol BLOB PUT newcol IN (newsbspace)


2. Скопировать BLOB-данные, используя функцию LOCOPY
3. Дропнуть старое поле
3. Переименовать новое поле

Никто не смог бы ничего посоветовать по этому поводу?

С уважением
Виктор
...
Рейтинг: 0 / 0
20.07.2012, 14:44
    #37887120
яфшуеі
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
не пробовал, но попробуй
ALTER TABLE tabname modify PUT col IN (newsbspace)
синтаксис вроде позволяет.
...
Рейтинг: 0 / 0
20.07.2012, 15:17
    #37887190
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
яфшуеіне пробовал, но попробуй
ALTER TABLE tabname modify PUT col IN (newsbspace)
синтаксис вроде позволяет.

эта операция будет касаться только новых записей, старые останутся в старом sbspace
...
Рейтинг: 0 / 0
20.07.2012, 17:44
    #37887430
яфшуеі
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
да, действительно
этим, возможно, тоже можно воспользоваться как вариантом
1. alter table ...
2. "апдейт" таблицы
...
Рейтинг: 0 / 0
24.07.2012, 09:27
    #37890017
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
яфшуеіда, действительно
этим, возможно, тоже можно воспользоваться как вариантом
1. alter table ...
2. "апдейт" таблицы
Простой апдейт не поможет. Он будет опять использовать старый sbspace. Нужно юзать именно функцию LOCOPY. Примерно так:
Код: sql
1.
insert into tabnew (blobvalnew) select locopy(blobvalold, 'tabnew', 'blobvalnew') from tabold;


Если опустить последние 2 параметра функции LOCOPY, то несмотря на то, что в описании новой таблицы конкретно стоит указание нового sbspace (..PUT .. IN (newsbspace)), создаваться он будет в старом sbspace, поскольку наследует характеристики той таблицы из которой он копируется!!! 2 последних параметра функции LOCOPY будут указывать новые характеристики вставляемого поля.
...
Рейтинг: 0 / 0
24.07.2012, 11:46
    #37890237
яфшуеі
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
"апдейт" был взят в кавычки чтобы не писать delete/insert, т.е. это не оператор update.
но, судя по всему, вы уже проблему решили.
...
Рейтинг: 0 / 0
24.07.2012, 22:12
    #37891318
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перенести BLOB поле в другой sbspace?
яфшуеі"апдейт" был взят в кавычки чтобы не писать delete/insert, т.е. это не оператор update.
но, судя по всему, вы уже проблему решили.
да. решили, все оказалось гораздо проще :)
можно и прямым "апдейтом", правда, несколько видоизмененным:
Код: sql
1.
2.
ALTER TABLE tabname PUT blobval IN (newsbspace);
UPDATE tabname SET blobval = LOCOPY(blobval, 'tabname', 'blobval') WHERE 1=1;


Если блоб-данных очень много, "апдейтить" частями, что бы избежать длинной транзакции, особенно если sbspace создан с опцией Df=LOG
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как перенести BLOB поле в другой sbspace? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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