Posted By: Koles (...) on 'CZdatabases'
Title:     Re: auto_increment v Postgresql
Date:      Mon Nov  1 10:08:14 1999

>      Kolesi, jsi vazne tak omezeny, ze nevidis za obzory jedne databaze
> resp. SQL serveru?

Podivej se do subjectu. A zmirni slovnik, jsi uz prece 
seriozni pan inzenyr, tak uz snad nemusis lidem nadavat
do omezencu jen kvuli tomu, ze ses v necem spletl :)

> Zda-li je sekvence pouze makro u jednoho SQL serveru, 
> kdo rika, ze musi stejna implementace byt i u jineho? 

Nikdo. Rozhodne ne ja. Dokonce ani nerikam, ze sekvence
je makro u pgSQL, tvrdil jsem to o "typu" serial.

>      Omezenost pg_dump je hodne velka, funguje dobre pouze pro PgSQL,
> vim o nekolika systemech, kde po nahrazeni tohoto Free engine bylo nutne 

"Vim o nekolika xxxx" je slovni vata, kterou se stridavymi
uspechy pouzivas uz nekolik let :)

Uznavam, ze v tomto pripade vyjimecne nemlzis, zapis
primary key pomoci
CREATE UNIQUE INDEX "test_id_key" on "test" using btree ( "id" "int4_ops" );
CREATE UNIQUE INDEX "test_pkey" on "test" using btree ( "id" "int4_ops" );
neni jiste to prave orechove.

>      Jenze u serial cislo pretece
> a jsi v pr. U DDL Ti to neni dovoleno, 

Toto je naprosto nesmyslna veta. U serial nemuze nic preteci,
protoze serial nic neni :)

Pokud bys trval na tom, ze serial neni makro, ale opravdovy
datovy typ, tak je to jediny ciselny datovy typ, ktery
pretyct nemuze. Proc?

Za chvili ukazu na priklade srozumitelnem i pro pomalejsi
ctenare.

> a jsi v pr. U DDL Ti to neni dovoleno, 
> serial jsem uvedel jako mozne pouziti nestandardniho rozsireni PgSQL (obdoba
> sqelosti MySQL) s tim, ze vyrazne doporucuji std. prostredky dostatecne 
> dosazitelne pres DDL. 

Ano. "Obdoba sqelosti MySQL" - myslel jsi zajiste AUTO_INCREMENT, ze?

Takze budme nazorni:

AUTO_INCREMENT u mysql je velmi sverazne rozsireni, ktere
nejakou vnitrni mechanikou rika "pri kazdym insertu inkrementuj".

Co dela serial, se muzeme presvetcit sami.

V psql si v testovaci db vytvorime jednoduchou tabulku prikazem:

test=> create table test (id serial, name char(12), primary key (id));

(coz mimo jine psql okomentuje zminkama o tom, co nam pritom
implicitne vyrobil).

A ted se kouknem, co nam to vlastne vzniklo:

pg_dump test
CREATE SEQUENCE "test_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 
1  cache 1 ;
CREATE TABLE "test" (
        "id" int4 DEFAULT nextval('test_id_seq') NOT NULL,
        "name" character(12));
[a tady jeste nasledujou data a indexy]

Tak. Tady se nam pgSQL sveruje s tim, ze pouzitim pseudotypu
"serial" programator urcite myslel zcela korektni DDL
vytvarejici auto inkrementujici se polozku za pomoci sekvence.

Co tady podle tebe bude pretykat? Co je neprenostitelne?
Chapes uz rozdil mezi auto_incrementem v mysql a serial
v pgsql?

  Pavel

Search the boards