I agree that having thousands of sequences can be hard to manage,
especially in a function, but you did not state that fact before,
only that you wanted separate sequences for each company. That
being said, here is an alternate solution.
Yep.. that was my mistake.
1. CREATE TABLE company_seqs
(company_id bigint NOT NULL,
last_seq bigint NOT NULL,
CONSTRAINT company_seqs_pk PRIMARY KEY (company_id)
);
2. Every time you create a new company, you must insert the
corresponding company_id and last_seq [which will be 1}
into the company_seqs table.
ok that's right.. just a comment here...
the value inside the users.code column must start with 1000 and not 1.
So, it would be 1001, 1002, 1003, etc.
The field "last_seq + 1" is ok, but how can I determine that the start point would be 1000?
3. Change the trigger function logic to something like below:
DECLARE
v_seq_num INTEGER;
BEGIN
SELECT last_seq
FROM company_seqs
WHERE company_id = NEW.company_id INTO v_seq_num;
UPDATE company_seqs
SET last_seq = last_seq + 1
WHERE company_id = NEW.company_id;
new.users_code = v_seq_num;
not sure what v_seq_num is...
Now, just a quick comment. As has been said before, wanting a sequence with no gaps for
each user in each company is a bit unrealistic and serves no purpose. For example,
company_id 3 has 10 users, 1 > 10. What do you do when user 3 leaves and is deleted?
As long as you have a unique user_code for each user, it does not matter.
>... Studying.. asking for some help to get a better understand.... isn't this the purpose of this mail list?
Yes, but at the same time, it is evident that you are trying to design the database before you have
a valid understanding of database design. To wit, you are putting the cart before the horse.
While this list is here to help you, it is not meant as a DATABASE 101 course.
Yep.. got it