специальный объект базы данных, который работает по сути, как автоматический счётчик: выдаёт число сгенерированное по заданному правилу и запоминает его

Это аналог автоинкремента из MySQL. Его можно использовать, когда требуется уникальный идентификатор. Например, в простых таблицах в качестве PRIMARY KEY

Некоторые особенности:

  • Можно указать начальное значение с которого будет вестись отсчёт
  • Можно задать шаг с которым будут генерироваться новые значения
  • В качестве шага можно указывать отрицательные значения (тогда последовательность будет убывающей)
  • sequence не обязан быть привязан к таблице, но может быть связан с колонкой (например, через OWNED BY или при использовании serial. Т.е. один sequence можно использовать даже в нескольких таблицах
  • Если две транзакции одновременно запросят значение одного sequence, то они получат разные значения
  • Значения sequence не откатываются при rollback транзакции — если число выдано, оно считается использованным.
  • Если в таблицу где в качестве значения одного из столбцов используется sequence, вставить значение вручную, то последовательность автоматически не "перещёлкнется" и в следующий раз отдаст значение которое уже есть в таблице. Это может вызвать ошибки, есть на столбце есть UNIQUE
  • При использовании sequence не гарантируется непрерывность, т.е. значения могут быть пропущены
  • У sequence есть границы MINVALUE и MAXVALUE при их достижении если указано NO CYCLE — будет ошибка, если CYCLE — значения начнут повторяться. CYCLE нельзя использовать для генерации уникальных идентификаторов.
Запросы:

CREATE SEQUENCE table_name_id_seq
START WITH 1000 -- начать с 1000 (если не указать будет начинаться с 1)
INCREMENT BY 10 -- шаг 10 (если не указать будет равен 1)
NO CYCLE; -- когда дойдёт до максимального значения выдаст ошибку, иначе начнётся с начала (NO CYCLE по умолчанию)

SELECT setval('table_name_id_seq', 5000); -- установить текущее значение sequence

SELECT nextval('table_name_id_seq'); -- получить следующее значение sequence напрямую

CREATE TABLE table_name (
    id int DEFAULT nextval('table_name_id_seq') PRIMARY KEY -- DEFAULT nextval('table_name_id_seq') означает что
                                                            -- по умолчанию будет использовано значение из sequence
);

SELECT * FROM table_name_id_seq; -- посмотреть текущее значение sequence