Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Научите, пожалуйста, почему после удаления строк и вставке новых поле SERIAL пропускает значения (те которые были удалены) Можно ли как-нибудь этого избежать? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:54 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Избежать можно. Но дизайнтайма разработчика и рантайма сервера оно не стоит. Так что не бери в голову :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 16:24 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
SERIAL это сиквенс который создается и убивается(при смерти колонки/таблицы) автоматом... интересно как ты себе представляеш реализацию такого сериала(с отсуствием пропусков) когда в таблице например насколько милионов строк и она безконца обновляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:47 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Если вопрос ко мне, то готов набросать несколько слов по-русски, но на SQL - не вижу смысла реально захламлять сервер, хотя там нет ничего сложного. Поле с автоинкрементом предназначено лишь для генерации УНИКАЛЬНЫХ значений с МИНИМАЛЬНЫМИ затратами и НЕ предназначено для генерации натурального ряда БЕЗ ПРОПУСКОВ. Стараюсь использовать инструменты по назначению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:37 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
вопрос был риторический и к автору темы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 10:16 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Господа. Прокатит ли такой вариант: все вставки в таблицу делать при уровне изоляции Serializable, значение сиквенса получать в тригере, если произойдёт ошибка, то устанавливать значение сиквенса на единицу назад? Изврат, конечно, но ничего другого не придумалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 12:21 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Сомневаюсь. Ладно, извраты так извраты, если кому надо (мне нет). Создать дополнительную таблицу, в которую триггером вставлять удаленные значения id основной таблицы. Дефолтом для id-поля основной таблицы сделать функцию, которая возвращает минимальное значение этой доп. таблицы и одновременно удаляет мин. запись из этой таблицы. Если доп. таблица пустая, возвращать nextval определенного заранее сиквенса. Если происходит массовое удаление записей из основной таблицы, можно предусмотреть периодическую обработку, которая апдейтит id-поле основной таблицы в порядке убывания значениями из доп. таблицы, очищает доп. таблицу и наконец устанавливает значение сиквенса равным максимальному основной таблицы. Если учесть, что сплошная нумерация элементарно делается на клиенте, то ИМХО это нах никому не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 13:57 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Спасибо всем! Я просто думал, что это не сложно. Как например вставлять в INTEGER поле (SELECT max(field_name) FROM table) +1 Понимаю, что это совсем не эфективно Думал есть чего-то красивее. А если так, то пусть пропускает :-! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 13:57 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
операции прев_вал нету т.е на единицу меньше это $a = cur_val set_val($a-1); cur_val -локальный в сесии.. у тебя курвал может быть 10 а на самом деле сиквенс уже за 100 перешел в других сесиях.. , и потом тригер относительно некст_вала не атомарная операция, грубоговоря.. между твоим нексвалом в тригере и ролбаком может произойит еще несколько некствалов от других сесий.. next_val атомарная необратимая операция.. ей насрать какой у тебя уровень изолированости.. она призванна обеспечивать уникальность.. ручное выставление сиквенса через set_val черевато глюками..особенно в такой ситуации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 14:03 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
В триггерную ф-ю пишешь по-типа: SELECT setval('public.plots_plid_seq', (SELECT CASE WHEN MAX(plid) IS NULL THEN 1 ELSE MAX(plid) end FROM plots), (SELECT CASE WHEN MAX(plid) IS NULL THEN False ELSE True end FROM plots) ); И вызываешь на DELETE /UPDATE (но не инсерт). Если скучно. А то я такие вещи делаю только после частичного влива данных "руками". (Если че-нть починять приходится). Чтобы не напороться на ошибку при попытке вставки дубля в ключевое поле. Вообше-то счетчик, генерящий уникумы для всех сеансов для того и придуман, чтобы не лезть за данными, не разбираться с транзакциями, а лепить последовательность автоматом (т.е. наибыстрейшим способом). Если кто-то отказался от вставки - пропуск на его совести. Для сплошной перенумерации в оформительских целях можно использовать другие приемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 14:13 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
К 4321: Наверное лучше трудно придумать. Спасибо! А вот это "Для сплошной перенумерации в оформительских целях можно использовать другие приемы" меня очень заинтересовало. Не поделитесь такими приёмами? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 16:59 |
|
||
|
Почему SERIAL делает пропуски
|
|||
|---|---|---|---|
|
#18+
Igor KozlovК 4321: Не поделитесь такими приёмами? оформление - это не SQL, а еще где-то (некая морда) Вот там заводите свои мордатые переменные, и инкрементируете их по своему желанию. ЗЫ. есть и "чиста ссыкульные" приемы - скорее упражнения для любящих стоячие лыжные упражнения с утяжелением в гамаке. Т.к. "чиста SQL" не предполагает упорядочивания данных, по крайней мере до применения ORDER BY. Приемы найдете в статьях на сайте (хотя для постгреса, наверное, можно напридумывать свои разновидности). Воспользуйтесь поиском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32969084&tid=2007379]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
81ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 445ms |

| 0 / 0 |
