PostgreSQL在另一列中按ID跟踪序列

时间:2019-04-06 10:11:05

标签: 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 个答案:

答案 0 :(得分:1)

不,一个序列绑定到一个序列,并且在不通知它的情况下不会重置。

但是,如果您想要每种产品的视频序号,则可以使用row_number()窗口函数查询表格以产生该表格。

SELECT product_id,
       row_number() OVER (PARTITION BY product_id
                          ORDER BY video_id) video_ordinal,
       video_hash
       FROM table;

为方便起见,您也可以为此查询创建一个视图,以便您可以查询该视图而不是表,并且该视图看起来像您想要的。