crossplatform.ru

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

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


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

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

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




Репутация:   94  


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

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sergey B.
  опции профиля:
сообщение 15.3.2011, 13:31
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.2.2008
Пользователь №: 92

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 13.3.2011, 15:04) *
ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?


Генератор в FB - это старший мастер ключ в таблице +1?
Если да то оно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.3.2011, 17:36
Сообщение #3


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

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

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




Репутация:   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и++.
Особенность её - она живёт вне транзакций. Т.е. если транзакцию откатить, то генератор не вернётся в прежнее состояние, это необходимо иначе начнётся каша.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Disaron
  опции профиля:
сообщение 16.3.2011, 12:42
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.2.2011
Пользователь №: 2420

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 13.3.2011, 15:04) *
ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?

На пальцах это контейнер с регулируемым автоинкрементом.
Можно использовать, например, для ключевого поля в таком синтаксисе:
CREATE TABLE tbl (
id_tbl integer DEFAULT nextval('sq_id_tbl'::regclass)
)

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

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


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




RSS Текстовая версия Сейчас: 23.8.2017, 16:37