What is the benefit to use sequence rather than just insert and get generated ID in postgresql ? I mean why don't just insert a record and the rdbms generate ID for you?
            Asked
            
        
        
            Active
            
        
            Viewed 54 times
        
    -1
            
            
        - 
                    1Using a sequence **is** the way to have the dbms generate an ID for you, so it's unclear what you are asking. – Bergi Sep 22 '22 at 01:21
- 
                    @Bergi Postgres has a `SERIAL` type, which avoids the need for an explicit sequence. – Tim Biegeleisen Sep 22 '22 at 01:23
- 
                    1@TimBiegeleisen Yes, and `SERIAL` is using a sequence, explicit or not, so I don't understand the question. (Btw you'd [better use an identity column instead of a `serial`](https://stackoverflow.com/q/55300370/1048572) these days, which encapsulates the underlying sequence even better) – Bergi Sep 22 '22 at 01:25
- 
                    Here is some history about the generated ID. It was a way to conform to standards as well as associate the sequence to the table, which was always created when using serial. https://www.enterprisedb.com/blog/postgresql-10-identity-columns-explained#comment-248607 there are still use cases where you want a sequence for something other than identity columns, but other than that you should use generated ID as it is cleaner and standards conforming. – toppk Sep 22 '22 at 01:32
- 
                    The question is unclear. using a sequence and getting the generated ID is the same as using a sequence, as far as I can tell. – Laurenz Albe Sep 22 '22 at 06:02
1 Answers
1
            For most purposes, SERIAL does the same thing as a sequence can do.  However, if you wanted your auto increment column to have a custom behavior, you might have to use a sequence.  For example, let's say that you wanted the sequence to start at 100.  Then you could use:
CREATE SEQUENCE your_seq
    START 101
    INCREMENT 1;
INSERT INTO yourTable (id, val)
VALUES (NEXTVAL('your_seq'), 'some text here');
 
    
    
        Tim Biegeleisen
        
- 502,043
- 27
- 286
- 360
- 
                    
- 
                    what if I just create primary key ID? No serial, no sequence. Will it be unique after insert: e.g. table: `ID, NAME` - INSERT into table SET NAME = 'a' ? – J.J. Beam Sep 22 '22 at 01:27
- 
                    1if you don't set serial or identity, then the insert will fail with uniqueness contraint – toppk Sep 22 '22 at 01:29
- 
                    @J.J.Beam If you have a primary key, no default value, and don't specify a value for that column, the insert will fail with the non-null constraint already. Uniqueness isn't even checked. – Bergi Sep 22 '22 at 01:36
- 
                    This answer is misleading, as `serial` is just a pseudo-type using a `SEQUENCE` underneath. And you can start your sequence in the same fashion either way. See: https://stackoverflow.com/a/14651788/939860. For Postgres 10, consider an `IDENTITY` column instead. (Still with a `SEQUENCE` underneath.) https://stackoverflow.com/a/9875517/939860 – Erwin Brandstetter Sep 22 '22 at 01:46
- 
                    @Erwin Is upvote possible? You still have more points than I do. – Tim Biegeleisen Sep 22 '22 at 01:47
- 
                    
