crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> PostgreSQL, что такое Последовательности?
Litkevich Yuriy
  опции профиля:
сообщение 13.3.2011, 15:04
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 15.3.2011, 17:36
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Sergey B. @ 15.3.2011, 15:31) *
Генератор в FB - это старший мастер ключ в таблице +1?
нет, но для таких целей обычно и используют

Для реализации автоинкрементного поля в FB используют связку Тригер+Генератор.

В тригере пишут примерно такой код:
SET TERM ^;
ALTER TRIGGER T_BLOBS_ID ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_BLOBS, 1);
END^
SET TERM; ^
где:
NEW.ID - новое значение поля ID
GEN_ID - вызов функции, которая получает у генератора GEN_BLOBS новое значение, посредством прибавления к нему "1".
Аналог этой строчки на Си:
ID = ++GEN_BLOBS;


Т.е. GEN_BLOBS по сути просто аналог статической переменной в Cи/Cи++.
Особенность её - она живёт вне транзакций. Т.е. если транзакцию откатить, то генератор не вернётся в прежнее состояние, это необходимо иначе начнётся каша.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 23:26