pgsql使用generate_series函数批量插入时提示键值已存在的问题

在进行数据库测试中,使用PostgreSQL的generate_series函数批量插入数据时,遇到主键冲突的问题。原因是generate_series生成的时间戳超出了预期的范围。解决方法是确保generate_series生成的日期个数与主键ID个数一致。调整后,将generate_series的时间截止到2021-04-0114:00:00,避免了主键重复和数据不匹配的错误。
摘要由CSDN通过智能技术生成

在对程序做测试需要对数据库做批量数据的插入
我这里使用了generate_series()函数,但在使用时遇到了
在这里插入图片描述
代码如下

INSERT INTO zf_active 
		select generate_series(147,149) as key,
		1,
		1,
		generate_series ( '2021-04-01 12:00:00':: TIMESTAMP, ('2021-04-01 16:00:00' ) :: TIMESTAMP, '1hour'),
		1,
		'小城旅馆',
		'574号',
		1,
		NULL,
		round( random( ) * 17+1 ),
		12,
		130105,
		'xx区',
		now( ),
		now( ) + '1 hour',
		20

由于设置主键是生成三条主键分别为147,148,149的三条数据,但是在后面一条的generate_series函数为这三条数据分别生成2021-04-01 12:00:00,2021-04-01 13:00:00,2021-04-01 14:00:00的时间。
注意由于步进设置的为1小时,生成到2021-04-01 16:00:00。那么他会不止生成三条。在生成到2021-04-01 14:00:00后,主键ID又会从147开始。所以会出现最开始那张图的错误。

解决办法:
使用generate_series()对日期生成的个数需要和主键ID生成的个数一致即可。

我这里把生成日期截止到2021-04-01 14:00:00就好了。

INSERT INTO zf_active 
		select generate_series(147,149) as key,
		1,
		1,
		generate_series ( '2021-04-01 12:00:00':: TIMESTAMP, ('2021-04-01 14:00:00' ) :: TIMESTAMP, '1hour'),
		1,
		'小城旅馆',
		'574号',
		1,
		NULL,
		round( random( ) * 17+1 ),
		12,
		130105,
		'xx区',
		now( ),
		now( ) + '1 hour',
		20

https://www.pianshen.com/article/6204134526/ pgsql批量插入数据

https://www.cnblogs.com/mchina/archive/2013/04/03/2997722.html generate_series函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值