PostgreSQL INSERT - 自动提交模式与非自动提交模式

时间:2013-08-12 13:30:58

标签: postgresql

我是PostgreSQL的新手,并且在我去的时候还在学习很多东西。我的公司正在使用PostgreSQL,我们用大量数据填充数据库。我们收集的数据本质上非常庞大,并且来自某些类型的视频片段。例如,与大约15分钟的视频相关的数据花了我大约2天的时间来摄取数据库。

我的问题是我的数据集与数小时的视频有关,需要几周的时间才能摄入到数据库中。我被告知部分原因是这需要花费很长时间来摄取是因为PostgeSQK默认情况下自动提交设置为true并且提交事务需要花费大量时间/资源。我被告知我可以关闭自动提交,因此这个过程会加速。但是,我担心的是多个用户将填充此数据库。如果我在每10秒钟之后更改程序以进行提交,并且两个人正在尝试填充同一个表。第一个人得到一个id,当他说出记录7时,第二个人试图插入到同一个表中,他们被赋予相同的id密钥,一旦第一个人决定提交他的更改,将使用第二个人id密钥,从而引发错误。

当多个人同时摄取数据时,将数据插入PostgreSQL数据库的最佳方法是什么?有没有办法在自动提交模式下插入数据时向多个人发出相同的id密钥?

1 个答案:

答案 0 :(得分:2)

如果ID来自serial类型或PostgreSQL序列(由serial类型使用),那么您永远不必担心两个用户从序列中获取相同的ID 。这根本不可能。 nextval()函数只能一次分发给定的ID。