返回

sql-插入每个分区的无间隙序列号

发布时间:2022-05-18 12:37:41 281
# 数据库

我有一个带有触发器的表,它为每个客户设置一个订单号,我经常在该表中遇到一个唯一键:

SQLSTATE[23505]: Unique violation: 7
ERROR: duplicate key value violates unique constraint "order_customer_unique"

触发器定义为BEFORE INSERT ON orders FOR EACH ROW.

有什么技术可以解决表中的并发问题吗?
理想情况下,每个客户的数字是一个序列,不会丢失数字。

CREATE OR REPLACE FUNCTION "public"."trigger_set_order_customer_number"()
  RETURNS "pg_catalog"."trigger" AS
$BODY$
BEGIN
   NEW.sequence = (
      SELECT COALESCE( MAX ( order.sequence), 0 ) + 1
      FROM orders
      WHERE orders.customer_type = NEW.customer_type
      AND orders.customer_id = NEW.customer_id
      AND orders.model_id = NEW.model_id LIMIT 1);
   RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(2)
按点赞数排序
用户头像