generated pk skipping existing

Hallo,
nach langem suchen habe ich leider keinen Eintrag zu dem Thema hier im Forum oder bei Google gefunden.
PKs mit einer Sequenz generieren zu lassen funktioniert ja sehr leicht, aber gibt es eine einfache Möglichkeit nach der Generierung zu prüfen ob dieser Verfügbar ist?

Beispiel:

Einträge existieren in der Tabelle mit PKs von 300-400. Die Sequenz startet bei 1 und inkrementiert um 1. Bei PK 299 sollte der nächste nicht 300 sein sondern 401.

Erreiche ich das nur duch Trigger und function/procedure oder extra Key Tabelle?

Danke für eure Hilfe!
Grüße Patrick

wäre das Setzen der Sequenze auf den höchsten Wert + 1 nicht auch eine Option?

ja, wäre eine Option und denke ich auch die einfachste. Ich hätte nur gerne das die PKs von der DB generiert werden ohne das ich selber Hand anlegen muss.
Ich bekomme Daten aus einer Excel Tabelle mit Pks die nicht verändert werden dürfen. Die Daten möchte ich zur Laufzeit einfügen ohne die sequenz anfassen zu müssen.

Dann dürfe das einmalige Setzen des Startwerts die beste Möglichkeit sein.

Gruß Uwe

Ja, das Problem das ich dabei habe ist nur das die Sequenz mir dann keine unique PKs erzeugt.

meine Sequenz:

create sequence primary_key_seq
    start 1
    increment 1
    NO MAXVALUE
    CACHE 1;

meine Tabelle:

create table article (
  artID serial PRIMARY KEY,
  artName varchar
);

Wenn ich Einträge mit

insert into article(arID, artName) values (nextval('primary_key_seq'), 'Schuhe');

einfüge funktioniert das ganze ja ohne Probleme.
Ich möchte unabhängig von der Sequenz Einträge wie

insert into article(arID, artName) values (300, 'Stiefel');

einfügen. Die Sequenz soll dann z.B. 300 überspringen und nach 299, 301 ausgeben.

Gibt es eine Möglichkeit das PostgreSql das automatisch kann oder muss ich das selber implementieren?

Das geht nur über einen Trigger der prüft ob ein Wert angegeben wurde, und dann ein entsprechendes setval() aufruft.

Alternativ, nach dem Importieren des Excel-Sheets einmal setval() aufrufen. Das setzt aber voraus, dass während dem Importieren keine anderen INSERTs gemacht werden.

Ich verstehe den Sinn noch nicht, warum die Sequence fortlaufend, im Sinne von ohne Lücken sein muss. Das scheint ja dein Hauptanliegen zu sein, oder?
Man könnte ja auch definieren, das arID, wenn durch PG vergeben negativ ist. Alles was über Excel eingefügt wird dann positiv, weil es so in der Excel steht.
Damit sollte es keine Überschneidungen mehr geben.

create sequence seq_test start with -1 increment by -1;

Wäre natürlich auch eine Möglichkeit, ist aber für die Ausgabe doof. (muss im Programm dann wieder *-1 gerechnet werden)
Lücken sind egal, es geht um Einträge die “von Hand” eingefügt worden sind und diese sollen übersrpungen werden. Das System läuft einen Tag und wird danach wieder auf Ursprung zurück gesetzt. Trotzdem möchte ich nicht von Hand die Pflege der PKs übernehmen.