Ich habe eine Tabelle in PostgreSQL mit 22 Spalten und möchte einen Primärschlüssel mit automatischer Inkrementierung hinzufügen.
Ich habe versucht, eine Spalte mit dem Namen id
BIGSERIAL zu erstellen, aber pgadmin hat mit einem Fehler geantwortet:
ERROR: sequence must have same owner as table it is linked to.
Weiß jemand, wie man dieses Problem behebt? Wie füge ich in PostgreSQL einen automatisch inkrementierenden Primärschlüssel hinzu, ohne die Tabelle erneut zu erstellen?
sql
postgresql
mkn
quelle
quelle
ALTER TABLE mytable ADD PRIMARY KEY (column);
. Postgresql überprüft, ob die Spalte keine NULL-Werte enthält.bigserial
undserial
geben den gleichen Fehler:ERROR: syntax error at or near "BIGSERIAL"
Primärschlüssel inkrementieren in postgresql:
Schritt 1, erstellen Sie Ihre Tabelle:
Schritt 2: Fügen Sie Werte wie folgt in Ihre Tabelle ein. Beachten Sie, dass mytable_key nicht in der ersten Parameterliste angegeben ist. Dadurch wird die Standardsequenz automatisch inkrementiert.
Schritt 3, wählen Sie * aus Ihrer Tabelle:
Schritt 4, interpretieren Sie die Ausgabe:
Beachten Sie, dass die Spalte mytable_key automatisch inkrementiert wurde.
ProTip:
Sie sollten immer einen Primärschlüssel für Ihre Tabelle verwenden, da postgresql intern Hash-Tabellenstrukturen verwendet, um die Geschwindigkeit beim Einfügen, Löschen, Aktualisieren und Auswählen zu erhöhen. Wenn eine Primärschlüsselspalte (die als eindeutig und nicht null erzwungen wird) verfügbar ist, kann davon abhängig gemacht werden, dass ein eindeutiger Startwert für die Hash-Funktion bereitgestellt wird. Wenn keine Primärschlüsselspalte verfügbar ist, wird die Hash-Funktion ineffizient, da ein anderer Satz von Spalten als Schlüssel ausgewählt wird.
quelle
SERIAL
schafft einen Blicksequence
hinter den Kulissen: postgresql.org/docs/9.2/static/...thing_id int references epictable(mytable_key)
Arbeit deklariert ?Erstellen Sie einen automatisch inkrementierenden Primärschlüssel in postgresql in einer benutzerdefinierten Reihenfolge:
Schritt 1, erstellen Sie Ihre Sequenz:
Schritt 2, erstellen Sie Ihre Tabelle
Schritt 3, in Ihre Tabelle einfügen
Schritt 4, beobachten Sie die Zeilen
Die beiden Zeilen haben Schlüssel, die bei 1 beginnen und gemäß der Reihenfolge um 1 erhöht werden.
Bonus Elite ProTip:
Programmierer hassen das Tippen, und das Tippen
nextval('splog_adfarm_seq')
ist ärgerlich. Sie könnenDEFAULT
stattdessen für diesen Parameter Folgendes eingeben:Damit dies funktioniert, müssen Sie einen Standardwert für diese Schlüsselspalte in der Tabelle splog_adfarm definieren. Welches ist schöner.
quelle
Wenn Sie dies in pgadmin tun möchten, ist es viel einfacher. Um in postgressql ein automatisches Inkrement zu einer Spalte hinzuzufügen, müssen wir zunächst eine automatische Inkrementierungssequenz erstellen und sie der erforderlichen Spalte hinzufügen. Das hat mir gefallen.
1) Zunächst müssen Sie sicherstellen, dass für Ihre Tabelle ein Primärschlüssel vorhanden ist. Behalten Sie außerdem den Datentyp des Primärschlüssels in bigint oder smallint bei. (Ich habe bigint verwendet und konnte keinen Datentyp namens serial finden, wie in anderen Antworten an anderer Stelle erwähnt.)
2) Fügen Sie dann eine Sequenz hinzu, indem Sie mit der rechten Maustaste auf Sequenz-> Neue Sequenz hinzufügen klicken . Wenn die Tabelle keine Daten enthält, lassen Sie die Reihenfolge unverändert und nehmen Sie keine Änderungen vor. Speichern Sie es einfach. Wenn Daten vorhanden sind, fügen Sie den letzten oder höchsten Wert in der Primärschlüsselspalte zum aktuellen Wert auf der Registerkarte Definitionen hinzu, wie unten gezeigt.
3) Fügen Sie abschließend die Zeile
nextval('your_sequence_name'::regclass)
wie unten gezeigt zum Standardwert in Ihrem Primärschlüssel hinzu.Stellen Sie sicher, dass der Sequenzname hier korrekt ist. Dies ist alles und das automatische Inkrementieren sollte funktionieren.
quelle
Wenn Sie Zahlen in einer Sequenz verwenden möchten, definieren Sie eine neue Sequenz mit so etwas wie
und ändern Sie dann die Tabelle, um die Reihenfolge für die ID zu verwenden:
quelle
Ich habe das folgende Skript versucht, um den Primärschlüssel in PostgreSQL erfolgreich automatisch zu erhöhen.
BEARBEITEN:
Das Schlüsselwort SERIAL erstellt automatisch eine Sequenz für die jeweilige Spalte.
quelle
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
und es funktioniert.Vielleicht bin ich etwas spät dran, um diese Frage zu beantworten, aber ich arbeite in meinem Job an diesem Thema :)
Ich wollte die Spalte 'a_code' = c1, c2, c3, c4 schreiben ...
Zuerst habe ich eine Spalte mit dem Namen
ref_id
und dem Typ geöffnetserial
. Dann habe ich mein Problem mit diesem Befehl gelöst:quelle