迁移postgres时序列错误脚本修复

Posted raspberry-zx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移postgres时序列错误脚本修复相关的知识,希望对你有一定的参考价值。

迁移postgres数据库的时候,有时候会出现序列与数据库值不匹配的现象.参考了https://stackoverflow.com/questions/244243/how-to-reset-postgres-primary-key-sequence-when-it-falls-out-of-sync之后,

改写了一下脚本,执行后可正常使用了.

 1 do --check seq not in sync
 2 $$
 3 declare
 4  _r record;
 5  _i bigint;
 6  _m bigint;
 7 begin
 8   for _r in (
 9     Select
10       DISTINCT(constraint_column_usage.table_name) as tablename,
11       constraint_column_usage.column_name as idname,
12       replace(replace(columns.column_default,‘‘‘::regclass),‘‘),nextval(‘‘‘,‘‘) as seqname,
13             columns.table_schema as schamename
14       from information_schema.constraint_column_usage, information_schema.columns
15       where constraint_column_usage.table_schema =public AND 
16       columns.table_schema = public AND columns.table_name=constraint_column_usage.table_name
17       AND constraint_column_usage.column_name = columns.column_name
18       AND columns.column_default is not null 
19    ) loop
20     execute format(select last_value from %I.%s,_r.schamename,_r.seqname) into _i;
21     execute format(select max(%I) from %I.%I,_r.idname,_r.schamename,_r.tablename) into _m;
22     if coalesce(_m,0) > _i then
23       raise info %,concat(changed: ,_r.tablename||_Id_seq, from:,_i, to:,_m);
24       execute format(alter sequence %I.%I restart with %s,_r.schamename,_r.seqname,_m);
25     end if;
26   end loop;
27 
28 end;
29 $$
30 ;

使用的时候根据实际情况修改一下 schema的值就好

以上是关于迁移postgres时序列错误脚本修复的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移 Postgres 错误

Postgres 和 alembic - 假设 SERIAL 序列

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

Kubernetes - 使用 flyway 作业在 postgres 数据库上执行迁移 - 连接问题

Django 数据库迁移错误(sqlite3->postgre)

无法在 Heroku 上运行迁移 Postgres