Wie wird der Primärschlüssel in PostgreSQL automatisch inkrementiert?
Ich habe eine Tabelle in PostgreSQL mit 22 Spalten, und ich möchte einen automatisch inkrementierenden Primärschlüssel hinzufügen.
Ich habe versucht, eine Spalte namens id
vom Typ 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 beheben kann? Wie kann ich einen automatisch inkrementierenden Primärschlüssel in PostgreSQL hinzufügen, ohne die Tabelle neu zu erstellen?
251
3
Versuchen Sie diesen Befehl:
Versuchen Sie es mit demselben DB-Benutzer, mit dem Sie die Tabelle erstellt haben.
Automatisch inkrementierender Primärschlüssel in Postgresql:
Schritt 1, erstellen Sie Ihre Tabelle:
**Schritt 2, fügen Sie Werte in Ihre Tabelle wie folgt ein, beachten Sie, dass mytable_key in der ersten Parameterliste nicht angegeben ist, dies bewirkt, dass die Standardreihenfolge automatisch erhöht wird.
*Schritt 3, select 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 von Inserts, Deletes, Updates und Selects zu erhöhen. Wenn eine Primärschlüsselspalte (die erzwungenermaßen eindeutig und nicht null ist) verfügbar ist, kann man sich darauf verlassen, dass sie einen eindeutigen Seed für die Hash-Funktion liefert. Wenn keine Primärschlüsselspalte verfügbar ist, wird die Hash-Funktion ineffizient, da sie eine andere Gruppe von Spalten als Schlüssel auswählt.
Erstellen eines automatisch inkrementierenden Primärschlüssels in Postgresql, unter Verwendung einer benutzerdefinierten Sequenz:
Schritt 1, Erstellen Sie Ihre Sequenz:
Schritt 2, erstellen Sie Ihre Tabelle
Schritt 3, Einfügen in Ihre Tabelle
Schritt 4, beobachten Sie die Zeilen
Die beiden Zeilen haben Schlüssel, die bei 1 beginnen und um 1 inkrementiert werden, wie durch die Sequenz definiert.
Bonus Elite ProTip:
Programmierer hassen das Tippen, und das Abtippen von
nextval('splog_adfarm_seq')
ist lästig. Sie können stattdessenDEFAULT
für diesen Parameter eingeben, etwa so:Damit das oben genannte funktioniert, müssen Sie einen Standardwert für diese Schlüsselspalte in der Tabelle splog_adfarm definieren. Das ist hübscher.