我已手动将生产中的所有数据导入到开发服务器,但出现此错误。我还在这里阅读了修复此问题的文章,但仅限于单个表。我已经导入了大约 10 个以上的表及其数据。这是错误:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "influences_pkey" DETAIL: Key (id)=(1) already exists. : INSERT INTO "influences" ("name", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"
Run Code Online (Sandbox Code Playgroud)
这是 plpgsql 来重置所有序列(在 pgadmin 或 psql 或任何其他客户端中运行):
do
$$
declare
_r record;
_i bigint;
_m bigint;
begin
for _r in (
SELECT relname,nspname,d.refobjid::regclass, a.attname, refobjid
FROM pg_depend d
JOIN pg_attribute a ON a.attrelid = d.refobjid AND a.attnum = d.refobjsubid
JOIN pg_class r on r.oid = objid
JOIN pg_namespace n on n.oid = relnamespace
WHERE d.refobjsubid > 0 and relkind = 'S'
) loop
execute format('select last_value from %I.%I',_r.nspname,_r.relname) into _i;
execute format('select max(%I) from %s',_r.attname,_r.refobjid) into _m;
if coalesce(_m,0) > _i then
raise info '%',concat('changed: ',_r.nspname,'.',_r.relname,' from:',_i,' to:',_m);
execute format('alter sequence %I.%I restart with %s',_r.nspname,_r.relname,_m+1);
end if;
end loop;
end;
$$
;
Run Code Online (Sandbox Code Playgroud)
或使用How to Reset Postgres' Primary Key Sequence when it Falls Out Synchronization?中提出的任何其他解决方案
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |