zoukankan      html  css  js  c++  java
  • 迁移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+1);
    24       execute format('alter sequence %I.%s restart with %s',_r.schamename,_r.seqname,_m+1);
    25     end if;
    26   end loop;
    27 
    28 end;
    29 $$
    30 ;

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

  • 相关阅读:
    C he 指针
    typedef 与 define
    (转)ubuntu中安装man手册查看函数原型
    .9 赫夫曼编码
    .8 AVL树
    PowerDesigner使用技巧
    C#基础
    NET框架设计
    Sql Server 执行计划及Sql查询优化
    SQL SERVER函数浅析
  • 原文地址:https://www.cnblogs.com/Raspberry-zx/p/12702310.html
Copyright © 2011-2022 走看看