Advertisement
dark_ess3nce

Untitled

Feb 10th, 2024
1,137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE user_sequences (
  2.     user_id uuid PRIMARY KEY,
  3.     next_order_id bigint DEFAULT 1
  4. );
  5.  
  6. INSERT INTO user_sequences (user_id) SELECT DISTINCT user_id FROM orders;
  7.  
  8. CREATE OR REPLACE FUNCTION next_order_id(user_id uuid) RETURNS bigint AS $$
  9. DECLARE
  10.     new_order_id bigint;
  11. BEGIN
  12.     UPDATE user_sequences
  13.     SET next_order_id = next_order_id + 1
  14.     WHERE user_id = next_order_id.user_id
  15.     RETURNING next_order_id INTO new_order_id;
  16.  
  17.     RETURN new_order_id;
  18. END;
  19. $$ LANGUAGE plpgsql;
  20.  
  21. CREATE OR REPLACE FUNCTION set_order_id()
  22. RETURNS TRIGGER AS $$
  23. BEGIN
  24.     NEW.order_id = next_order_id(NEW.user_id);
  25.     RETURN NEW;
  26. END;
  27. $$ LANGUAGE plpgsql;
  28.  
  29. CREATE TRIGGER set_order_id_trigger
  30. BEFORE INSERT ON orders
  31. FOR EACH ROW
  32. EXECUTE FUNCTION set_order_id();
  33.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement