Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / alter table... и файербёрд умер / 22 сообщений из 22, страница 1 из 1
12.07.2004, 14:07:03
    #32599675
guest38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
использую 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
12.07.2004, 14:10:34
    #32599686
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
а разве можно уменьшать размер поля?
...
Рейтинг: 0 / 0
12.07.2004, 14:14:58
    #32599703
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
У меня только предположение, что работая с этой таблицей ты не завершил транзакции перед тем как делать alter table. Поэтому он не в нирване, а в ожидании.
...
Рейтинг: 0 / 0
12.07.2004, 15:08:30
    #32599865
alex777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
Соглашусь с земляком,
и с alex_k тоже согласен на 100 %,
но по идее должны были отрезаться лишние поля и не более того, сделай статистику по базе и плиз в студию
...
Рейтинг: 0 / 0
12.07.2004, 18:41:12
    #32600424
guest38
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
проверил на поле в пустой таблице.
да, действительно, выходит, что размер поля уменьшать нельзя :(
(интересно почему?)

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

Если все-таки нужно 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
13.07.2004, 08:41:07
    #32600776
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
создать временное поле, в него перекинуть данные из старого поля, старое удалить и создать новое с нужной длиной, затем перекинуть данные в новое поле, временное поле удалить, всё.
кстати обрезать не забывай до нужной длины...
...
Рейтинг: 0 / 0
13.07.2004, 09:34:06
    #32600823
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
вообще, мне кажется это неудобством.
ладно если нельзя урезать поле при простом присваивании.
но почему cast(somefield as varchar(xx)) не обрезает?
ведь cast для того и придуман, чтобы типы приводить...
...
Рейтинг: 0 / 0
13.07.2004, 09:59:00
    #32600878
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alter table... и файербёрд умер
alex_kвообще, мне кажется это неудобством.
ладно если нельзя урезать поле при простом присваивании.
но почему cast(somefield as varchar(xx)) не обрезает?
Приведи свое понимание результата следующего выражения:

Код: plaintext
CAST ( 123456  AS SMALLINT)

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

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

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

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

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

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

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

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

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


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