Postgres a typ serial (long)
David Sauer
davids na orfinet.cz
Středa Červenec 14 22:00:54 CEST 1999
>>>> "Jan" == Jan Havlicek <havlicek na vse.cz> writes:
Jan> Pekny podvecer... Omlouvam se za offtopic, ale odkaz na mailovou
Jan> konferenci primo o postgresu mi tezce nevyhovuje. Pokud nekdo
Jan> zprovozni branu do news, rad budu cist primo tu.
Nekdo by moh ...
Jan> A ted k problemu:
Jan> mam v postgresu nadefinovanou tabulku kde id sloupec je typ
Jan> serial. Spravne by se pri insertu mel vytvorit unikatni ciselny
Jan> klic. Jenze ja dopadnu takhle:
Jan> rekneme ze tabulka ma dve pole: is serial, jmeno text
Rekneme ze ano (me teda nesla polozka 'is' vytvorit, je to zrejme
rezervovane slovo).
Jan> insert into tabulka (jmeno) values ('nejaky text'); rekne ze
Jan> nemuze vlozit duplikovany unikatni klic.
Podivne, co je to za verzi ... me to proslo normalne ... (nedaval jste do
te tabulky neco predtim ?)
$ psql
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc egcs-2.91.66]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: david
david=> create table tbl (s serial, jmeno text);
NOTICE: CREATE TABLE will create implicit sequence 'tbl_s_seq' for SERIAL column 'tbl.s'
NOTICE: CREATE TABLE/UNIQUE will create implicit index 'tbl_s_key' for table 'tbl'
CREATE
david=> insert into tbl(jmeno) values ('asdf');
INSERT 20671 1
david=> insert into tbl(jmeno) values ('asdf');
INSERT 20672 1
david=> insert into tbl(jmeno) values ('asdf');
INSERT 20673 1
david=> insert into tbl(jmeno) values ('asdf');
INSERT 20674 1
david=> insert into tbl(jmeno) values ('sjsjsjsj');
INSERT 20675 1
david=> insert into tbl(jmeno) values ('sjsjsjsj');
INSERT 20676 1
david=> insert into tbl(jmeno) values ('sjsjsjsj');
INSERT 20677 1
david=> insert into tbl(jmeno) values ('sjsjsjsj');
INSERT 20678 1
Jan> insert into tabulka values (nextval('tabulka_id_seq'),'Nejaky
Jan> text');
Jan> rekne totez. Ta seqence opchopitelne existuje.
Taktez:
david=> insert into tbl values (nextval('tbl_s_seq'), 'sjjsjs');
INSERT 20679 1
david=> insert into tbl values (nextval('tbl_s_seq'), 'sjjsjs');
INSERT 20680 1
david=> insert into tbl values (nextval('tbl_s_seq'), 'sjjsjs');
INSERT 20681 1
david=> insert into tbl values (nextval('tbl_s_seq'), 'sjjsjs');
INSERT 20682 1
A vypis:
david=> select * from tbl;
s|jmeno
--+--------
1|asdf
2|asdf
3|asdf
4|asdf
5|sjsjsjsj
6|sjsjsjsj
7|sjsjsjsj
8|sjsjsjsj
9|sjjsjs
10|sjjsjs
11|sjjsjs
12|sjjsjs
(12 rows)
Jan> Zlate mysql. Tam stacilo vlozit null a bylo to.
Zlaty postgres ... nemusite vkladat ani NULL, doplni si to sam. (pokud si
definujete jako prvni sloupec jmeno a druhy id), pak staci jen:
insert into tbl values ('skssjsj');
david=> create table t1 (jmeno text, s serial);
NOTICE: CREATE TABLE will create implicit sequence 't1_s_seq' for SERIAL column 't1.s'
NOTICE: CREATE TABLE/UNIQUE will create implicit index 't1_s_key' for table 't1'
CREATE
david=> insert into t1 values ('sjsjsj');
INSERT 20714 1
david=> insert into t1 values ('sjsjsj');
INSERT 20715 1
david=> insert into t1 values ('sjsjsj');
INSERT 20716 1
david=> insert into t1 values ('sjsjsj');
INSERT 20717 1
david=> insert into t1 values ('s=sjajsa');
INSERT 20718 1
david=> insert into t1 values ('s=sjajsa');
INSERT 20719 1
david=> select * from t1;
jmeno |s
--------+-
sjsjsj |1
sjsjsj |2
sjsjsj |3
sjsjsj |4
s=sjajsa|5
s=sjajsa|6
(6 rows)
Jan> Nevite nekdo, kde muze byt zakopany hafan??? Uz skoro nevidim na
Jan> monitor a potreboval bych to rozjet. Takhle skonci programatro, co
Berte to jako _zacatek_ prace s postgresem ...
Jan> pouzije phplib a z duvodu rychlosti odladi projekt na serveru kde
Jan> je jen mysql a pak ho chce snadno prestehovan na server kde je jen
Jan> Postgress. Bohuzel nestaci jen vymenit definicni soubory se
Jan> sprsavnou tridou.
--
* David Sauer, student of Czech Technical University
* electronic mail: davids na orfinet.cz (mime compatible)
Další informace o konferenci Linux