Давайте в 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));