Последовательности.md 3.0 KB

Давайте в psql посмотрим описание таблицы author. Открываем `psql`, вводим \d author.

rroom_db=> \d author
                                   Table "public.author"
   Column    |          Type          | Collation | Nullable |           Default
-------------+------------------------+-----------+----------+------------------------------
 author_id   | bigint                 |           | not null | generated always as identity
 name        | character varying(150) |           | not null |
 description | text                   |           |          |
Indexes:
    "author_pkey" PRIMARY KEY, btree (author_id)
Check constraints:
    "author_description_check" CHECK (length(description) >= 30)
    "author_name_check" CHECK (length(name::text) >= 3)
Referenced by:
    TABLE "book" CONSTRAINT "book_author_id_fkey" FOREIGN KEY (author_id) REFERENCES author(author_id)

И также давайте посмотрим просто выдачу \d по нашей базе данных:

rroom_db=> \d
                     List of relations
 Schema |             Name              |   Type   | Owner
--------+-------------------------------+----------+-------
 public | author                        | table    | rroom
 public | author_author_id_seq          | sequence | rroom
 public | book                          | table    | rroom
 public | book_book_id_seq              | sequence | rroom
 public | book_category                 | table    | rroom
 public | book_category_category_id_seq | sequence | rroom
(6 rows)

Напрямую работать с последовательностью для первичных ключей как правило нет необходимости, но полезно знать, что они существуют и какие возможности дают. Давайте посмотрим информацию по последовательности book_book_id_seq:

rroom_db=> \d book_book_id_seq
                      Sequence "public.book_book_id_seq"
  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
 bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
Sequence for identity column: public.book.book_id

Давайте создадим последовательность и посмотрим, как с ней работать — просто для примера и понимания того, как вы можете с ними работать:

CREATE SEQUENCE tmp_seq
START 1
MINVALUE 1
MAXVALUE 9223372036854775807
INCREMENT BY 1
CACHE 1
NO CYCLE;

select nextval('tmp_seq');
select nextval('tmp_seq');
select nextval('tmp_seq');

select currval('tmp_seq');

drop sequence tmp_seq;

~={green}Задание=~

create sequence orders_seq;
select setval('orders_seq', ((to_char(current_timestamp, 'YYYYMMDD')||'000')::bigint));