因此,我正在尝试创建一个数据库,该数据库可以存储来自产品的视频,但是我确实打算添加几百万个。所以显然我希望性能尽可能好。
我想实现以下目标:
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
时会发生这种情况吗?因为恐怕它将插入一个我不希望的其他值(整个列中的最大值)。
谢谢。
答案 0 :(得分:1)
不,一个序列绑定到一个序列,并且在不通知它的情况下不会重置。
但是,如果您想要每种产品的视频序号,则可以使用row_number()
窗口函数查询表格以产生该表格。
SELECT product_id,
row_number() OVER (PARTITION BY product_id
ORDER BY video_id) video_ordinal,
video_hash
FROM table;
为方便起见,您也可以为此查询创建一个视图,以便您可以查询该视图而不是表,并且该视图看起来像您想要的。