powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / alter table... и файербёрд умер
22 сообщений из 22, страница 1 из 1
alter table... и файербёрд умер
    #32599675
guest38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использую fb 1.5.
есть таблица вида:

id integer not null (pk)
name varchar(128) not null
... и ещё с десяток полей

в таблице порядка 10000 записей
делаю alter table sometable alter column name type varchar(80),
после чего файербёрд сжирает все ресурсы системы и уходит в нирвану.
полчаса я подождал для приличия, а потом прибил это дело.
что бы сие могло значить?
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32599686
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве можно уменьшать размер поля?
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32599703
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня только предположение, что работая с этой таблицей ты не завершил транзакции перед тем как делать alter table. Поэтому он не в нирване, а в ожидании.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32599865
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соглашусь с земляком,
и с alex_k тоже согласен на 100 %,
но по идее должны были отрезаться лишние поля и не более того, сделай статистику по базе и плиз в студию
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600424
guest38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил на поле в пустой таблице.
да, действительно, выходит, что размер поля уменьшать нельзя :(
(интересно почему?)

собственно, мне это нужно, чтобы индекс построить по полю, а так как fb не хочет делать индексы по varchar c длиной больше 80 символов для collate = pxw_cyrl, то хотелось бы просто размер поля уменьшить до 80. и как это можно по другому сделать, не пересоздавая поля?
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600707
Dremuchij Forester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотри
тут

Если все-таки нужно pxw, то в скрипте
Код: plaintext
1.
...\nALTER TABLE MYTABLE ADD NEWFIELD VARCHAR( 80 ) COLLATE PXW_CYRL;\n...\nUPDATE MYTABLE SET NEWFIELD = OLDFIELD; \nCOMMIT WORK;\n...\nALTER TABLE MYTABLE DROP OLDFIELD;\n...\nALTER TABLE MYTABLE ALTER NEWFIELD TO OLDFIELD;\n... --Если важен порядок полей, то \n 
UPDATE RDB$RELATION_FIELDS SET RDB$FIELD_POSITION= 2 \n WHERE RDB$RELATION_NAME=\'MYTABLE\' AND RDB$FIELD_NAME=\'OLDFIELD\';\n...\nUPDATE RDB$RELATION_FIELDS SET RDB$FIELD_POSITION= 5 \n WHERE RDB$RELATION_NAME=\'MYTABLE\' AND RDB$FIELD_NAME=\'OTHERFIELD\';\n...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600776
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создать временное поле, в него перекинуть данные из старого поля, старое удалить и создать новое с нужной длиной, затем перекинуть данные в новое поле, временное поле удалить, всё.
кстати обрезать не забывай до нужной длины...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600823
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще, мне кажется это неудобством.
ладно если нельзя урезать поле при простом присваивании.
но почему cast(somefield as varchar(xx)) не обрезает?
ведь cast для того и придуман, чтобы типы приводить...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600878
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kвообще, мне кажется это неудобством.
ладно если нельзя урезать поле при простом присваивании.
но почему cast(somefield as varchar(xx)) не обрезает?
Приведи свое понимание результата следующего выражения:

Код: plaintext
CAST ( 123456  AS SMALLINT)

alex_kведь cast для того и придуман, чтобы типы приводить...
Он приводит типы без потери данных.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600897
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
57920

а если хочется с потерей данных?

ну ясно, в общем. нет так нет
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32600962
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k57920

Вот так люди и вешаются на своих подтяжках после двух суток отладки такой хрени.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601033
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Насчет уменьшения размера полей в пустой таблице делал все работает.
Спомощью Alter. Не знаю как у тебя, но у меня в момент изменения на полях отсутствовали индексы, может по этому и неразрешает.
По индексам была так же проблема. FB ругается не навеличину большую varchar(80), а на общий размер индекса. Индекс у тебя наверняка состовной. Просумируй размеры всех полей. В варчаре один символ - 1 байт, Integer - 4 байта и т.д.
Вобщем я делал общий размер индекса не более примерно 190 байт.
И вобще лучше не делай в PK или UIndex поля с типом varchar, очень медленно получится.
Можно как попробовать каждому значению поля сделать в соответствии поле типа Integer. Наверняка так будет лучше тебе решать.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601057
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Код: plaintext
1.
Насчет уменьшения размера полей в пустой таблице делал все работает.
Спомощью Alter. Не знаю как у тебя, но у меня в момент изменения на полях отсутствовали индексы, может по этому и неразрешает.
Хочу поправить сам себя. Вспомнил Alter Я неделал создовал таблицы заново с меньшим размером поля.
Поэтому возможно как вы и говорили с Alter может и не работать.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601430
guest38
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо.
через временное поле действительно можно извратиться и создать-таки индекс без потери данных. только, как выяснилось, он при запросе вида
select * from sometable where upper(name) like '%sometext%'
все равно не используется. а жаль
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601440
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest38[индекс] при запросе вида select * from sometable where upper(name) like '%sometext%' все равно не используется. а жаль

жаль конечно, но это и невозможно...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601653
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
На будущее изменить размер поля в таблице можно. Только через системные таблицы. Я работаю в IBExpert, если изменить его визуально, т.е. спопощью окон (глупо звучит), то он показывает скрипт изменения размера поля. Надо будет конечно немного по разбиратся, но проблема решаема.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601667
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VKVНа будущее изменить размер поля в таблице можно. Только через системные таблицы. Я работаю в IBExpert, если изменить его визуально, т.е. спопощью окон (глупо звучит), то он показывает скрипт изменения размера поля. Надо будет конечно немного по разбиратся, но проблема решаема.

да тут уже был один такой товарищ, который поменял размер поля через изменение содержимого системных таблиц... ничо хорошего не получил, только геморрой лишний...

хотя можно и с помощью системных таблиц, но перед этим лучше сделать бэкап, и вообще делать такое не на рабочей БД...

но всё это, ИМХО, изврат, я лучше через временное поле сделаю, надёжнее оно будет...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601696
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFя лучше через временное поле сделаю, надёжнее оно будет...Поддерживаю.
"Лучше перебдеть, чем недобдеть", как говаривал классик.
Соблазн поковыряться в системных таблицах велик.
Особенно если есть инструмент, позволяющий это делать незадумываясь.
Но давайте вспомним байку про обезьяну и гранату...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601854
VKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VKV
Гость
Людей всегла отпугивыет, то что они незнают и непонимают. Там нет ничего сложного, их создовали такие же люди как мы. Нужно немного времени и терпения, что бы с этим разобраться.
А данные которые там содержатся очень полезны. Вобщем каждый решает сам, что он хочет добится и как он этого хочет добится.
Присоединяю файл который содержит некоторую информацию о системных таблицах.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601879
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VKVЛюдей всегла отпугивыет, то что они незнают и непонимают. Там нет ничего сложного, их создовали такие же люди как мы. Нужно немного времени и терпения, что бы с этим разобраться.
А данные которые там содержатся очень полезны. Вобщем каждый решает сам, что он хочет добится и как он этого хочет добится.
Присоединяю файл который содержит некоторую информацию о системных таблицах.

ну и попробуй изменить размерность поля varchar с 512 до 255 через сист. таблицы, при условии, что есть данные размерностью больце 255 символов, а потом поделись впечетлениями...
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601897
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нравится твоя самоуверенность
Только не стони потом, как этот товарищ.
...
Рейтинг: 0 / 0
alter table... и файербёрд умер
    #32601902
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адресовано было VKV
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / alter table... и файербёрд умер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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