Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:重复键值违反了Postgresql的唯一约束,而不是SQlite->;为什么?_Django_Postgresql_Unique Constraint - Fatal编程技术网

Django:重复键值违反了Postgresql的唯一约束,而不是SQlite->;为什么?

Django:重复键值违反了Postgresql的唯一约束,而不是SQlite->;为什么?,django,postgresql,unique-constraint,Django,Postgresql,Unique Constraint,我刚刚用Postgresql数据库部署了我的项目,并得到了一个错误,这是我在sqlite开发数据库中没有遇到的 整数错误/随机化设置/编辑/ 重复键值违反唯一约束“adm_bra_pkey” 详细信息:键(bra_ide)=(1)已存在 我有一张桌子(adm_bra),上面有两行字 我尝试在视图中使用models.objects.create()方法插入带有代码的新行 为什么postgresql会出现这种情况,而sqlite数据库不会? 我尝试删除并重新启动adm_bra的序列,但它不起作用 谢

我刚刚用Postgresql数据库部署了我的项目,并得到了一个错误,这是我在sqlite开发数据库中没有遇到的

整数错误/随机化设置/编辑/ 重复键值违反唯一约束“adm_bra_pkey” 详细信息:键(bra_ide)=(1)已存在

我有一张桌子(adm_bra),上面有两行字

我尝试在视图中使用models.objects.create()方法插入带有代码的新行

为什么postgresql会出现这种情况,而sqlite数据库不会? 我尝试删除并重新启动adm_bra的序列,但它不起作用

谢谢你的帮助

编辑 我做了一些测试 首先,我重新初始化了我的表

DELETE FROM adm_bra;
ALTER SEQUENCE adm_pro_pro_ide_seq RESTART WITH 1;
INSERT INTO adm_bra ("bra_ide","ran_st1","ran_st2","bra_00A_act","bra_00A_lib","bra_00B_act","bra_00B_lib","bra_00C_act","bra_00C_lib","bra_00D_act","bra_00D_lib","bra_log","bra_dat","pay_ide_id") 
VALUES (1,1,1,1,'HCQ+LPV/r',1,'HCQ+DRV/r',1,'LPV/r+TMS',1,'LPV/r+ATS','admin',now(),1);
INSERT INTO adm_bra ("bra_ide","ran_st1","ran_st2","bra_00A_act","bra_00A_lib","bra_00B_act","bra_00B_lib","bra_00C_act","bra_00C_lib","bra_00D_act","bra_00D_lib","bra_log","bra_dat","pay_ide_id") 
VALUES (2,2,1,1,'HCQ+LPV/r',1,'HCQ+DRV/r',1,'LPV/r+TMS',1,'LPV/r+ATS','admin',now(),1);
如果我尝试执行以下代码,则会出现唯一约束错误:

Bras.objects.create(
                ran_st1 = 1, 
                ran_st2 = 1,
                bra_00A_act = 1, 
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1, 
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )
但是,如果执行此代码,它会工作:

b= Bras(           ran_st1 = 1,ran_st2 = 1,
                bra_00A_act = 1,
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1,
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )
b.save()
Bras.objects.create(
                ran_st1 = 1, 
                ran_st2 = 1,
                bra_00A_act = 1, 
                bra_00A_lib = 'HCQ+LPV/r', 
                bra_00B_act = 1, 
                bra_00B_lib = 'HCQ+DRV/r', 
                bra_00C_act = 1, 
                bra_00C_lib = 'LPV/r+TMS', 
                bra_00D_act = None, 
                bra_00D_lib = None, 
                bra_00E_act = None, 
                bra_00E_lib = None, 
                bra_00F_act = None, 
                bra_00F_lib = None, 
                bra_00G_act = None, 
                bra_00G_lib = None, 
                bra_00H_act = None, 
                bra_00H_lib = None, 
                bra_00I_act = None, 
                bra_00I_lib = None, 
                bra_00J_act = None, 
                bra_00J_lib = None, 
                bra_dat = timezone.now(), 
                bra_log = 'admin', 
                pay_ide_id = 2
            )


实际上,您正在用1重新启动序列,然后在查询中手动传递bra_ide的值。因此,在执行这些查询时,序列不用于创建默认列。当您尝试插入时,序列将提供值1,因为它是第一次运行,并且您会得到一个完整性错误


运行查询时,删除bra_ide列及其值。因此,您的序列将自动生成值。

很乐意提供帮助。将它标记为帮助他人的答案。