Deacuerdo con maturano.
Las secuencias son la solución a tu problema.
Te muestro en un ejemplo como implementarlas.
Código SQL:
Ver originalpruebas=> CREATE SEQUENCE seq_idpersona START WITH 1;
CREATE SEQUENCE
pruebas=> CREATE TABLE persona(id INTEGER PRIMARY KEY,nombre text);
NOTICE: CREATE TABLE / PRIMARY KEY will CREATE implicit INDEX "persona_pkey" fo
CREATE TABLE
pruebas=> INSERT INTO persona VALUES(NEXTVAL('seq_idpersona'),'daniel');
INSERT 0 1
pruebas=> INSERT INTO persona VALUES(NEXTVAL('seq_idpersona'),'ana');
INSERT 0 1
pruebas=> INSERT INTO persona VALUES(NEXTVAL('seq_idpersona'),'diego');
INSERT 0 1
pruebas=> INSERT INTO persona VALUES(NEXTVAL('seq_idpersona'),'alex');
INSERT 0 1
pruebas=> SELECT *FROM persona;
id | nombre
----+--------
1 | daniel
2 | ana
3 | diego
4 | alex
(4 filas)
pruebas=>
saludos