1 问题描述
由于mysql迁移到pg库,然后对之前的表重新做了分区,
从新设置绑定的主键名称,导致主键序列从1开始,
最后导致主键冲突的异常!!
2 解决办法:
2.1 查看所有表序列
SELECT
'SELECT setval(''' ||
pg_get_serial_sequence('public.' || table_name, column_name) ||
''', (SELECT COALESCE(MAX(' || column_name || '), 0) FROM public.' || table_name || '), true);'
AS reset_sql,
table_name,
column_name
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_catalog = 'okyun'
AND column_default LIKE 'nextval%'
ORDER BY table_name;
2.2 逐个重置序列到当前最大
SELECT setval('public.verifac_invoice_invoice_id_seq', (SELECT COALESCE(MAX(invoice_id), 0) FROM public.verifac_invoice), true);
SELECT setval('public.verifac_invoice_detail_detail_id_seq', (SELECT COALESCE(MAX(detail_id), 0) FROM public.verifac_invoice_detail), true);
......
2.3 可以批量一次全部处理
写个脚本,一次执行,但是不推荐,怕处理不好就跑路了!!!