Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PostgreSQL, что такое Последовательности?
Форум на CrossPlatform.RU > Разработка > SQL. Базы данных.
Litkevich Yuriy
ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?
Sergey B.
Цитата(Litkevich Yuriy @ 13.3.2011, 15:04) *
ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

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


Генератор в FB - это старший мастер ключ в таблице +1?
Если да то оно.
Litkevich Yuriy
Цитата(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
Цитата(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 собственно сама последовательность. Счетчик назад не откатывается, при удалении элемента таблицы, хотя вручную откатить можно без проблем - правкой секваенса.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.