kzen.dev
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 mkn
mkn
Question

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 2011-10-10T20:56:40+00:00 3
 SeldomNeedy
SeldomNeedy
Edited question 17 marec 2015 в 11:15
Programovanie
sql
postgresql
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
 A.H.
A.H.
10 október 2011 в 9:10
2011-10-10T21:10:26+00:00
Viac na
Zdroj
Upraviť
#13566348

Vyskúšajte tento príkaz:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

Vyskúšajte ho s tým istým používateľom DB, s ktorým ste vytvorili tabuľku.

280
0
Artificial intelligence to parse product page
productapi.dev
Eric Leschinski
Eric Leschinski
17 október 2012 в 12:44
2012-10-17T00:44:32+00:00
Viac na
Zdroj
Upraviť
#13566349

Automatická inkrementácia primárneho kľúča v postgresql:

Krok 1, vytvorenie tabuľky:

CREATE TABLE epictable
(
    mytable_key    serial primary key,
    moobars        VARCHAR(40) not null,
    foobars        DATE
);

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.

insert into epictable(moobars,foobars) values('delicious moobars','2012-05-01')
insert into epictable(moobars,foobars) values('worldwide interblag','2012-05-02')

*Krok 3, vyberte z vašej tabuľky:**

el@voyager$ psql -U pgadmin -d kurz_prod -c "select * from epictable"

Krok 4, interpretujte výstup:

mytable_key  |        moobars        |  foobars   
-------------+-----------------------+------------
           1 | delicious moobars     | 2012-05-01
           2 | world wide interblags | 2012-05-02
(2 rows)

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.

Eric Leschinski
Eric Leschinski
Edited answer 28 december 2013 в 4:56
248
0
Artificial intelligence to parse product page
productapi.dev
Eric Leschinski
Eric Leschinski
2 november 2012 в 12:27
2012-11-02T00:27:56+00:00
Viac na
Zdroj
Upraviť
#13566350

Vytvorenie automaticky inkrementujúceho primárneho kľúča v postgresql pomocou vlastnej sekvencie:

Krok 1, vytvorenie sekvencie:

create sequence splog_adfarm_seq
    start 1
    increment 1
    NO MAXVALUE
    CACHE 1;
ALTER TABLE fact_stock_data_detail_seq
OWNER TO pgadmin;

Krok 2, vytvorte svoju tabuľku

CREATE TABLE splog_adfarm
(
    splog_key    INT unique not null,
    splog_value  VARCHAR(100) not null
);

Krok 3, vložte do tabuľky

insert into splog_adfarm values (
    nextval('splog_adfarm_seq'), 
    'Is your family tree a directed acyclic graph?'
);

insert into splog_adfarm values (
    nextval('splog_adfarm_seq'), 
    'Will the smart cookies catch the crumb?  Find out now!'
);

Krok 4, pozorujte riadky

el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm"

splog_key |                            splog_value                             
----------+--------------------------------------------------------------------
        1 | Is your family tree a directed acyclic graph?
        2 | Will the smart cookies catch the crumb?  Find out now!
(3 rows)

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:

insert into splog_adfarm values (
    DEFAULT, 
    'Sufficient intelligence to outwit a thimble.'
);

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.

Eric Leschinski
Eric Leschinski
Edited answer 28 december 2017 в 8:42
33
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Inessa bu
Registered pred mesiacom
2
Denis Babushkin
Registered pred mesiacom
3
asakuno asakuno
Registered pred mesiacom
4
aldo salerno
Registered pred mesiacom
5
Анна Батицкая
Registered pred 2 mesiacmi
Artificial intelligence to parse product page
productapi.dev
DE
EL
ES
FR
ID
IT
JA
NL
NO
PT
RO
RU
SK
SL
TR
ZH
© kzen.dev 2023
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora