PostgreSQL为源强制结束任务 源库无法连接时,重置目标库中的序列值 在某些极端场景下,源数据库可能已经被损坏而无法连接,此时仍需将目标库中与自增或自减列相关联的序列值进行重置。如果源数据可以连接,请忽略此节,参考上节操作即可。 步骤 1 使用对应DRS任务的目标数据库测试链接用户,登录该同步任务的目标数据库。 步骤 2 使用如下语句,查询出将nextval作为表列默认值的序列对应的序列值重置sql语句。 set searchpath to ''; select 'SELECT pgcatalog.setval('quoteliteral(quoteident(s.sequenceschema)'.'quoteident(s.sequencename))', (SELECT 'case when s.increment::int 0) where c.datatype in ('bigint', 'int', 'integer', 'smallint', 'numeric', 'real', 'double precision', 'double') and c.columndefault like 'nextval(%%' order by s.sequenceschema, s.sequencename; 查询结果为需要在目标数据库中执行的sql语句。 步骤 3 如果源库的版本小于10.0,请忽略此步。如果源库的版本不小于10.0,请在目标库中执行如下语句查询出重置表标识列附加序列的对应序列值的sql语句。 set searchpath to ''; select 'SELECT pgcatalog.setval('quoteliteral(seqname)', (SELECT 'case when increment::int 0 and objid in (select c.oid from pgclass c join pgnamespace n on c.relnamespacen.oid where c.relkind'S' and n.nspname !~ '^pg' and n.nspname<>'informationschema')) p(seqname,tablename,colname,increment); 查询结果为需要在目标数据库中执行的sql语句。 步骤 4 在目标库中执行步骤步骤2和步骤步骤3中查询出的sql语句。 步骤 5 在目标库中执行如下语句,检查序列值同步结果。 SELECT n.nspname, c.relname, nextval(c.oid) from pgclass c join pgnamespace n on c.relnamespacen.oid where c.relkind 'S' and n.nspname !~'^pg' and n.nspname<>'informationschema' order by 1,2;