#postgresql
#postgresql
Вопрос:
Итак, я пытаюсь создать базу данных, в которой могут храниться видеоролики из продуктов, но я намерен добавить несколько миллионов из них. Поэтому, очевидно, я хочу, чтобы производительность была как можно лучше.
Я хотел добиться следующего:
BIGINT | SMALLSERIAL | VARCHAR(30)
product_id | video_id | video_hash
1 1 Dkfjoie124
1 2 POoieqlgkQ
1 3 Xd2t9dakcx
2 1 Df2459Afdw
Однако, когда я вставляю новое видео для продукта:
INSERT INTO TABLE (product_id, video_hash) VALUES (2, DSpewirncS)
Я хочу, чтобы произошло следующее:
BIGINT | SMALLSERIAL | VARCHAR(30)
product_id | video_id | video_hash
1 1 Dkfjoie124
1 2 POoieqlgkQ
1 3 Xd2t9dakcx
2 1 Df2459Afdw
2 2 DSpewirncS
Произойдет ли это, когда я установлю тип столбца для video_id
на SMALLSERIAL
? Потому что я боюсь, что он вставит другое значение (самое высокое во всем столбце), чего я не хочу.
Спасибо.
Ответ №1:
Нет, серийный номер привязан к последовательности, и он не сбрасывается без указания этого.
Но если вам нужен порядковый номер для видео по продуктам, вы можете запросить таблицу для ее создания с помощью row_number()
функции window.
SELECT product_id,
row_number() OVER (PARTITION BY product_id
ORDER BY video_id) video_ordinal,
video_hash
FROM table;
Вы также могли бы создать представление для этого запроса для удобства, чтобы вы могли запрашивать представление вместо таблицы, и представление выглядело бы так, как вы этого хотите.