powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / last_value или nextval?
11 сообщений из 11, страница 1 из 1
last_value или nextval?
    #33773763
Katt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте. Есть процедура на триггер before insert:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION f() RETURNS "trigger" AS
$BODY$
begin
  if (чего-то там)
  then 
    NEW.id:=(SELECT last_value FROM id_seq)+ 1 ;
    return NEW; 
  else
    return null; 
  end if;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Если делать так, то после отклонений вставки id проскакивает по последовательности. То же самое, если:
Код: plaintext
1.
NEW.id:=nextval(id_seq);
Подскажите, пожалуйста, возможно ли insert'ить id без пропусков при таком раскладе?
...
Рейтинг: 0 / 0
last_value или nextval?
    #33773980
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо - пустое.
Но если оченб хочется, напишите например вью с руле на вставку и без дефаулта на рульный id - если не хочется переписывать определение таблицы (то же самое - можно прямо триггером before update без дефаулта на id в таблице).

навар счетчика у вас идет не за счет ластвелью или некствала, а за счет отработки дефаулта (сериала) в таблице.
К тому же пользоваться самопалом типа ластвал+1 - плохой тон (поимеете траблы в сетевой работе).
...
Рейтинг: 0 / 0
last_value или nextval?
    #33774112
Katt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будет ли вьюшка с рулом на insert выгоднее,чем просто оставить default в покое?
И какое должно быть это правило, чтоб не было проблем с частым обращениям к этой таблице/представлению?
...
Рейтинг: 0 / 0
last_value или nextval?
    #33776258
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KattБудет ли вьюшка с рулом на insert выгоднее,чем просто оставить default в покое?


Сильно сомневаюсь. А в силу каких причин вас не устраивает последовательность?
...
Рейтинг: 0 / 0
last_value или nextval?
    #33776534
Katt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если будет повторяться последовательность:
занесли правильно,занесли не правильно... , то будут страшные дыры в поле id.
А так всё устраивает, просто подумалось,что вручную от этого можно избавиться.
...
Рейтинг: 0 / 0
last_value или nextval?
    #33776900
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KattЕсли будет повторяться последовательность:
занесли правильно,занесли не правильно... , то будут страшные дыры в поле id.
А так всё устраивает, просто подумалось,что вручную от этого можно избавиться.
Вас пугают страшные дыры? Ради этого вы готовы использовать ненадежные рукотворные средства?
...
Рейтинг: 0 / 0
last_value или nextval?
    #33776957
Katt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Молодо - зелено... Значит, дыры...
...
Рейтинг: 0 / 0
last_value или nextval?
    #33779159
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KattЕсли будет повторяться последовательность...

По умолчанию последовательность в восьмерке 64-битная. Через сколько у вас истратится 9*10^18 значений?

Не парьтесь.
...
Рейтинг: 0 / 0
last_value или nextval?
    #33780075
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KattМолодо - зелено... Значит, дыры...можно снести дефаулт с поля, и оставить тригггер почти как он у вас приведен (если не сносить - то он попросту неправильно написан - не нада сильничать, а оставлять New.id в покое - по дефолту он и сам будет нужным, если конечно не задан руками (вместодефолта) прямо в инсерте) . Тогда дыр из-за отказа вставки в триггере не будет - ибо некствал не вызовется при невыполнении условия => счетчик не наварится. Будут дыры из-за удаления записей (или из-за отказа вставке по иным причинам). Насколько такой триггер будет дороже дефаулта, и будет ли - надо тестить.
...
Рейтинг: 0 / 0
last_value или nextval?
    #33780878
> Насколько такой триггер будет дороже дефаулта, и будет ли

Нужно говорить не о том, насколько дороже, а о том, насколько правильнее использовать триггер вместо default. Imho триггер предпочтительнее во всех случаях.
...
Рейтинг: 0 / 0
last_value или nextval?
    #33782245
Katt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит, у меня 2 варианта:
1) таблица t1(id: int4, ...)
последовательность s_t1;
триггерная процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if (...)
then 
   NEW.id=nextval(s_t1);
   return NEW; 
else
   RAISE NOTICE ('Null');
   return null; 
end if;
2) таблица t1(id: serial, ...)
триггерная процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if (...)
then 
   return NEW; 
else
   RAISE NOTICE ('Null');
   return null; 
end if;
И тогда 1) вариант будет предпочтительней, как правило хорошего тона..? А 2) вариант - стабилен, но коряв.так?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / last_value или nextval?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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