Viac na
Ako nastaviť automatickú inkrementáciu primárneho kľúča v PostgreSQL?
Mám tabuľku v PostgreSQL s 22 stĺpcami a chcem pridať primárny kľúč s automatickou inkrementáciou.
Pokúsil som sa vytvoriť stĺpec s názvom id
typu BIGSERIAL, ale pgadmin odpovedal chybou:
ERROR: sequence must have same owner as table it is linked to.
Vie niekto, ako tento problém vyriešiť? Ako môžem pridať vytvorenie automaticky sa zvyšujúceho primárneho kľúča v PostgreSQL bez toho, aby som musel tabuľku znovu vytvárať?
251
3
Vyskúšajte tento príkaz:
Vyskúšajte ho s tým istým používateľom DB, s ktorým ste vytvorili tabuľku.
Automatická inkrementácia primárneho kľúča v postgresql:
Krok 1, vytvorenie tabuľky:
Krok 2, vložte hodnoty do vašej tabuľky takto, všimnite si, že v prvom zozname parametrov nie je zadaný mytable_key, to spôsobí automatické zvýšenie predvolenej sekvencie.
*Krok 3, vyberte z vašej tabuľky:**
Krok 4, interpretujte výstup:
Všimnite si, že stĺpec mytable_key bol automaticky inkrementovaný.
ProTip:
V tabuľke by ste mali vždy používať primárny kľúč, pretože postgresql interne používa štruktúry hash tabuliek na zvýšenie rýchlosti vkladania, mazania, aktualizácie a výberu. Ak je k dispozícii stĺpec primárneho kľúča (ktorý je vynútený ako jedinečný a nenulový), možno sa naň spoľahnúť, že poskytne jedinečný seed pre hashovaciu funkciu. Ak nie je k dispozícii žiadny stĺpec primárneho kľúča, hašovacia funkcia sa stáva neefektívnou, pretože ako kľúč vyberá nejakú inú množinu stĺpcov.
Vytvorenie automaticky inkrementujúceho primárneho kľúča v postgresql pomocou vlastnej sekvencie:
Krok 1, vytvorenie sekvencie:
Krok 2, vytvorte svoju tabuľku
Krok 3, vložte do tabuľky
Krok 4, pozorujte riadky
Tieto dva riadky majú kľúče, ktoré začínajú na 1 a sú inkrementované o 1, ako je definované v sekvencii.
Bonusový tip Elite ProTip:
Programátori neznášajú písanie a vypisovanie
nextval('splog_adfarm_seq')
je otravné. Namiesto toho môžete pre tento parameter napísaťDEFAULT
, napríklad takto:Aby vyššie uvedené fungovalo, musíte definovať predvolenú hodnotu pre tento kľúčový stĺpec v tabuľke splog_adfarm. Čo je krajšie.