我已经从PHP artisan命令创建了迁移,它已经在我的Postgres数据库中创建了一个表,其ID设置为auto_increment
。
我在laravel中做了一些播种器,并且通过php artisan db:seed命令将三行数据馈送到了先前创建的表中。
当我通过某种形式在同一张表中插入数据时,这给我一个错误。
error:SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "roles_pkey" DETAIL: Key (id)=(1) already exists. (SQL: insert into "roles" ("name", "guard_name", "updated_at", "created_at") values (staff, web, 2019-07-03 07:38:37, 2019-07-03 07:38:37) returning "id")
答案 0 :(得分:0)
序列是一个对象,无论每次调用哪个事务,该对象都将在每个请求上返回一个更大的值。默认情况下,序列从1开始,可以应用于一个表或多个表,因此它不知道表中已经有多少个值。如果您希望插入内容起作用,则需要手动进行设置。
SELECT setval('roles_id_seq', (SELECT coalesce((SELECT max(id) from roles),1)))
该查询假设使用的序列是在"id"
表的"roles"
列上创建的,如果没有,则可以通过检查DDL列来找到序列名称。 NOT NULL DEFAULT setval('the_sequence_name')
并使用它来设置值。