gpt4 book ai didi

php - PostgreSQL:唯一违反:7 错误:重复键值违反唯一约束 "users_pkey"

转载 作者:IT王子 更新时间:2023-10-29 00:30:53 28 4
gpt4 key购买 nike

我在我的 Laravel 应用程序中使用 psql。我正在尝试创建我的用户,但我一直收到此错误

Unique violation: 7 ERROR: duplicate key value violates unique constraint "users_pkey"


这是我为存储用户所做的

$user = User::where('account_id','=',$id)->first();
$user->email = $account->email_address;
$user->fb_email = '';
$user->tw_email = '';
$user->fb_access_token = '';
$user->fb_profile_id = '';
$user->fb_page_id = '';
$user->fb_username = '';
$user->save();

这是我创建用户表的方式

CREATE TABLE "users" (
"id" serial NOT NULL ,
"account_id" varchar(255) NOT NULL ,
"email" varchar(255) NOT NULL ,
"fb_email" varchar(255) NOT NULL ,
"tw_email" varchar(255) NOT NULL ,
"created_at" timestamp(0) without time zone,
"updated_at" timestamp(0) without time zone,
"fb_access_token" varchar(255) NOT NULL ,
"fb_profile_id" varchar(255) NOT NULL ,
"fb_page_id" varchar(255) NOT NULL ,
"fb_username" varchar(255) NOT NULL ,
PRIMARY KEY ("id")

);

我是否做了任何我应该做的事情?

当我将我的应用程序与 MySQL Hook 时,我现在所拥有的东西曾经可以正常工作。

任何提示/建议对我来说意义重大。


截图

enter image description here

最佳答案

Postgres 处理自动递增的方式与 MySQL 略有不同。在 Postgres 中,当您创建 serial 字段时,您还创建了一个序列字段,用于跟踪要使用的 id。此序列字段将从值 1 开始。

当你向表中插入一条新记录时,如果你不指定id字段,它将使用序列的值,然后递增序列。但是,如果您确实指定了 id 字段,则不会使用该序列,也不会更新它。

我假设当您转移到 Postgres 时,您植入或导入了一些现有用户及其现有 ID。当您使用他们的 ID 创建这些用户记录时,没有使用序列,因此它永远不会更新。

因此,例如,如果您导入了 10 个用户,您的用户 ID 为 1-10,但您的序列仍为 1。当您尝试在不指定 ID 的情况下创建新用户时,它会从中提取值序列 (1),你会得到一个唯一的违规,因为你已经有一个 ID 为 1 的用户。

要解决此问题,您需要将 users_id_seq 序列值设置为现有用户的 MAX(id)。你可以阅读this question/answer有关重置序列的更多信息,但您也可以尝试类似(未经测试)的方法:

SELECT setval(pg_get_serial_sequence('users', 'id'), coalesce(max(id)+1, 1), false) FROM users;

仅供引用,这在 MySQL 中不是问题,因为当手动将值插入自动递增字段时,MySQL 会自动将自动递增序列更新为最大列值。

关于php - PostgreSQL:唯一违反:7 错误:重复键值违反唯一约束 "users_pkey",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com