How to set auto increment primary key in PostgreSQL? How to set auto increment primary key in PostgreSQL? postgresql postgresql

How to set auto increment primary key in PostgreSQL?


Try this command:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

Try it with the same DB-user as the one you have created the table.


Auto incrementing primary key in postgresql:

Step 1, create your table:

CREATE TABLE epictable(    mytable_key    serial primary key,    moobars        VARCHAR(40) not null,    foobars        DATE);

Step 2, insert values into your table like this, notice that mytable_key is not specified in the first parameter list, this causes the default sequence to autoincrement.

insert into epictable(moobars,foobars) values('delicious moobars','2012-05-01')insert into epictable(moobars,foobars) values('worldwide interblag','2012-05-02')

Step 3, select * from your table:

el@voyager$ psql -U pgadmin -d kurz_prod -c "select * from epictable"

Step 4, interpret the output:

mytable_key  |        moobars        |  foobars   -------------+-----------------------+------------           1 | delicious moobars     | 2012-05-01           2 | world wide interblags | 2012-05-02(2 rows)

Observe that mytable_key column has been auto incremented.

ProTip:

You should always be using a primary key on your table because postgresql internally uses hash table structures to increase the speed of inserts, deletes, updates and selects. If a primary key column (which is forced unique and non-null) is available, it can be depended on to provide a unique seed for the hash function. If no primary key column is available, the hash function becomes inefficient as it selects some other set of columns as a key.


Create an auto incrementing primary key in postgresql, using a custom sequence:

Step 1, create your sequence:

create sequence splog_adfarm_seq    start 1    increment 1    NO MAXVALUE    CACHE 1;ALTER TABLE fact_stock_data_detail_seqOWNER TO pgadmin;

Step 2, create your table

CREATE TABLE splog_adfarm(    splog_key    INT unique not null,    splog_value  VARCHAR(100) not null);

Step 3, insert into your table

insert into splog_adfarm values (    nextval('splog_adfarm_seq'),     'Is your family tree a directed acyclic graph?');insert into splog_adfarm values (    nextval('splog_adfarm_seq'),     'Will the smart cookies catch the crumb?  Find out now!');

Step 4, observe the rows

el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm"splog_key |                            splog_value                             ----------+--------------------------------------------------------------------        1 | Is your family tree a directed acyclic graph?        2 | Will the smart cookies catch the crumb?  Find out now!(3 rows)

The two rows have keys that start at 1 and are incremented by 1, as defined by the sequence.

Bonus Elite ProTip:

Programmers hate typing, and typing out the nextval('splog_adfarm_seq') is annoying. You can type DEFAULT for that parameter instead, like this:

insert into splog_adfarm values (    DEFAULT,     'Sufficient intelligence to outwit a thimble.');

For the above to work, you have to define a default value for that key column on splog_adfarm table. Which is prettier.