crossplatform.ru

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


  Ответ в PostgreSQL, что такое Последовательности?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Disaron Дата 16.3.2011, 12:42
 
Цитата(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 собственно сама последовательность. Счетчик назад не откатывается, при удалении элемента таблицы, хотя вручную откатить можно без проблем - правкой секваенса.
Litkevich Yuriy Дата 15.3.2011, 17:36
 
Цитата(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и++.
Особенность её - она живёт вне транзакций. Т.е. если транзакцию откатить, то генератор не вернётся в прежнее состояние, это необходимо иначе начнётся каша.
Sergey B. Дата 15.3.2011, 13:31
 
Цитата(Litkevich Yuriy @ 13.3.2011, 15:04) *
ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

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


Генератор в FB - это старший мастер ключ в таблице +1?
Если да то оно.
Litkevich Yuriy Дата 13.3.2011, 15:04
  ковырялся в PGAdmin, переведённом, увидел там в дереве пункт - "Последовательности".

Т.к. с PostgreSQL дел не имел, а только с Firebird, поясните на пальцах, что такое последовательности? Это не тоже что и генераторы в Firebird?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:55