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