Primarykey mit Startwert

Hallo ich habe eine Frage wie man einen Primarykey mit Startwert anlegen kann?
Ich lege also eine Tabelle an:

CREATE TABLE test(

MyPrimaryKey INTEGER (Hier sollte jetzt irgendwie der startwert stehen)
);

z.B. dass der Primary key mit 2000 beginnt und sich ständig um 1000 erhöht. Das Erhöhen kann man doch mithilfe von “serial” lösen. Aber wie das ganze kombenieren und dann dass sich der Wert immer um 1000 erhöht z.B. Ist es machbar überhaupt?

Ja und nein.
Theoretisch geht das, aber praktisch willst du das nicht so lösen.

Du könntest eine Tabelle mit einem SERIAL erstellen und dann mittels pg_dump schauen, wie die SQL-Befehle dafür aussehen.
Dann musst du nur noch die SEQUENCE anpassen, um deinen Startwert und deine Schrittweite anzupassen.

Und nun der praktische Nachteil:
Einmal vergebene Werte bekommst du nicht zurück.
Solltest du einmal eine Transaktion zurückrollen, hast du ein Loch in deiner Zählung.

SEQUENCE ist schon richtig. Du kannst die Parameter einer definierten Sequence (z.B. Startwert, INCREMENT BY u.s.w.) mit ALTER SEQUENCE ändern. Details in der Doku.

OK vielen Dank :slight_smile:

Noch eine Frage.
Ich lege mir diese Tabelle an:

CREATE TABLE Test(
T_ID SERIAL PRIMARY KEY,
Name VARCHAR(50)
);

Jetzt möchte ich noch eine Tabelle anlegen, in der ein FK gibt und diese FK referenziert den PK in der Tabelle Test.

Ich dachte ich mache es so:

CREATE TABLE Testref(
TEST_ID SERIAL References Test(T_ID) ON UPDATE CASCADE ON DELETE CASCADE,
Blabla VARCHAR(50)
);

Das Problem ist jedoch, dass beim anlegen dieser Tabelle gleich noch eine Tabelle erstellt wird weil ich auch hier ein Serial anlege. Warum ist es so? Oder muss es so sein? Den die zusätzliche Tabelle für due Sequence braucht man nicht mehr, es ist nur ein FK.

Oder habe ich was falsches gemacht?