powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
25 сообщений из 112, страница 1 из 5
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251924
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При создании таблицы "range" получаю ошибку:
This operation is not defined for system tables.
unsuccessful metadata update.
key size exceeds implementation restriction for index "nrj_range__uq".

why?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE DATABASE '<путь_к_БД>'
USER 'SYSDBA' PASSWORD 'masterke'
PAGE_SIZE 4096
DEFAULT CHARACTER SET UTF8;

CREATE DOMAIN ID99 AS SMALLINT
  CHECK (NOT(VALUE IS NOT NULL AND (VALUE < 1 OR VALUE > 99)));
CREATE DOMAIN ID0099 AS SMALLINT
  CHECK (NOT(VALUE IS NOT NULL AND (VALUE < 1 OR VALUE > 9999)));
CREATE DOMAIN NAME AS VARCHAR(158) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI;
COMMIT WORK;

CREATE TABLE "range"
(
    "id"    ID0099  NOT NULL,
    "rr_id" ID99    DEFAULT NULL,
    "name"  NAME    NOT NULL,
  CONSTRAINT "range__pk" PRIMARY KEY ("id"),
  CONSTRAINT "range__fk__rr" FOREIGN KEY ("rr_id")
    REFERENCES "rr" ("id") ON UPDATE CASCADE ON DELETE SET NULL,
  CONSTRAINT "range__uq" UNIQUE ("rr_id", "name")
);
COMMIT WORK;


P.S. Создание таблицы "rr" опущено, т.к. в ней нет ничего интересного.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251946
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

версия FB?
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251955
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, сори, забыл...
Версия сервера: 2.5.6 (WI-V6.3.6.26980 Firebird 2.5)
Версия клиента: 2.5.6.27008
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251960
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

что-то ты не договариваешь. Не вижу в твоих метаданных nrj_range__uq
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251963
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, это "range__uq", в названии которого я забыл удалить лишние символы. Суть от этого не меняется.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251966
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

с коллейтом UNICODE_CI_AI 1 символ может занимать до 6 байт. В принципе расчёт показывает что вмещаться в лимит должно, но на всякий случай попробуй увеличить размер страницы до 8192.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39251968
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devСимонов Денис, это "range__uq", в названии которого я забыл удалить лишние символы...
Где там пробелы, я - не увидел.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252040
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, с размером страницы экспериментировать не стал. У нас есть очень консервативные люди, которые подобное ограничение не поймут, а тратить силы, нервы и время на объяснения я не готов.
Убрал вообще ключевое слово COLLATE, чтоб он был по умолчанию и тоже возникли кое-какие странности. При VARCHAR(240) возникает та же ошибка, хотя 1024 / 4 = 256, а при VARCHAR(200) сервер проглотил и сказал, что всё Ok. Может дело в хитром алгоритме индексирования составных индексов, содержащих символы? Что-нибудь типа:
Код: plsql
1.
Cast(Coalesce(Right('000000' || Cast("rr_id" AS VARCHAR(6)), 6), '') || "name" AS VARCHAR(5) CHARACTER SET UTF8)


?
ИМХО, такое предположение хоть как-то объясняет нехватку размера индекса при PAGESIZE: 4096
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252056
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправочка
Код: plsql
1.
Cast(Coalesce(Right('000000' || Cast("rr_id" AS VARCHAR(6)), 6), '') || "name" AS VARCHAR(224) CHARACTER SET UTF8)
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252122
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

http://ibase.ru/files/firebird/langref25rus/index.html#langref25-ddl-index-create

смотри табличку "Длина индексируемой строки и набор символов"

В PDF версии она тоже есть.

И таки для составных индексов там что-то ещё учитывается. Может выравнивание.

А страницу зря не хочешь увеличить. Для БД в UTF-8 такой размер страницы слишком маленький. Не на количестве символов, так на глубине индексов на грабли наступишь.

P.S. В 3.0 по умолчанию страница уже 8192.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252127
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, спасибо, учту.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252176
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devс размером страницы экспериментировать не стал. У нас есть очень консервативные люди
современная БД с размером страницы меньше 8к это ад, трэш, угар и тормоза. ФБ начиная с 2.0 (или может даже с 1.5) при restore автоматом поднимет размер страницы с 1к или 2к до 4к, и меньше 4к делать не будет. Но страница 4к - медленнее, чем 8к.
Нынче 8к или 16к - оптимум.
Со страницей 32к тесты будут, опубликуем.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252178
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос-то не в этом, а том почему ключ получается такой большой. Может, баг где-то в
расчёте длины, а может ещё где...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252273
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devRight('000000'
хрен знает, во что это превращается. И еще раз - страница в 1024 байт, это просто ахтунг нынче. никакой консерватизм это не оправдывает. Мы когда такие базы чиним, делаем б-р с увеличением размера страницы до 4-8к. И потом клиенты сразу говорят - ой, оно еще и быстрее работать стало!
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252283
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИ еще раз - страница в 1024 байт
У него 4096.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252290
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

да, но он же пишет
"При VARCHAR(240) возникает та же ошибка, хотя 1024 / 4 = 256, а при VARCHAR(200) сервер проглотил и сказал, что всё Ok"

в общем, х.з.

p.s. а вот что самое ужасное, это вот это
Код: sql
1.
CONSTRAINT "range__pk" PRIMARY KEY ("id"),


ну вырви-глаз просто. Я бы за это применял инструменты по месту .
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252292
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvон же пишет
4096 / 4 = 1024 - размер ключа.
1024 / 4 = 256 - размер utf-8 строки в символах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252305
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

максимальный размер ключа на 9 байт меньше 1/4 страницы.
Т.е. 4096 / 4 - 9 = 1024 - 9 = 1015
1015 / 4 = 253 в utf-8

но у него индекс ещё и составной. Там возможно куда-то ещё байты тратятся. И явно не 2 байта как можно было бы предположить.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисявно не 2 байта как можно было бы предположить.

Ключ для smallint это double, 8 байт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252318
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для композитов все сложнее и оверхед там больше
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252333
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

А примерно узнать эвристику можно?
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252355
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
длина каждого сегмента (плюс один байт для DESC) плюс догонка от 1 до 4 байт на сегмент. И весь ключ потом до 8 байт вверх округляется.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252362
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Код: sql
1.
CONSTRAINT "range__pk" PRIMARY KEY ("id"),


ну вырви-глаз просто. Я бы за это применял инструменты по месту .
Мне так удобнее и привычнее. Предпочитаю видеть все ограничения сразу в одном месте, а не бродить глазами по хвостам полей.
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252363
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСимонов Денисявно не 2 байта как можно было бы предположить.

Ключ для smallint это double, 8 байт.

В смысле BIGINT ?
...
Рейтинг: 0 / 0
Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
    #39252364
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВ смысле BIGINT ?
DOUBLE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 1 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Растолкуйте про ошибку на составной ключ с utf8(unicode_ci_ai)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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