On Tue, May 3, 2016 at 5:06 PM, Melvin Davidson <melvin6...@gmail.com>
wrote:

>
>
> On Tue, May 3, 2016 at 7:53 PM, drum.lu...@gmail.com <drum.lu...@gmail.com
> > wrote:
>
>>
>>>
>>> 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
>>
>
>
> >The field "last_seq + 1" is ok, but how can I determine that the start
> point would be 1000?
> Really, how hard is it to change 1 to 1000?
> INSERT INTO company_seqs
>    (company_id, last_seq  )
> VALUES
>    ( {whatever_new_company_id_id}, 1000};
>
> Really, you need to start thinking for yourself, but first _learn database
> design_! That is why I recommended those books to you.
>
> >not sure what v_seq_num is...
> It is a variable in the TRIGGER FUNCTION, Again, you need to learn first.
> Try reading the docs!
> http://www.postgresql.org/docs/9.2/interactive/index.html
> http://www.postgresql.org/docs/9.2/interactive/plpgsql.html
> http://www.postgresqltutorial.com/postgresql-stored-procedures/
> http://www.postgresqltutorial.com/creating-first-trigger-postgresql/
>
> Use google search for additional information on PostgreSQL
>
>
​+1

And ​I'll add to the doc list.  Make sure to follow links around and not
just read the linked pages.​

​http://www.postgresql.org/docs/9.5/interactive/sql-altersequence.html
​
​David J.​

Reply via email to