Vzhledem k tomu, ze jsem na PostgreSQL vyrustal hodne let (uz tomu bude za chvili 10), dovolim si opravit nekolik nepresnosti a doplneni par postrehu za mne:
- psql pouziva readline - co autorovi clanku chybi po strance pohodli prikazoveho radku?
- parametrizovane dotazy umi PgSQL uz hoooodne davno, v podstate od doby, co se objevil nastroj ECPG, coz neni nic jineho nez Pro*C ala Oracle a obdobne nastroje v kazde rozumne databazi (MySQl, abych nehanil marne, protoze jsem ho uz nekolik let nehledal, ale o nicem takovem v podstate neuvazoval, vystaci si s libmysql, dost ubohe). Ano, mluvim o Embedded SQL, coz je presne misto, kde maji parametrizovane dotazy byt (kdyz uz ne ve stored procedurach - tedy v plSQL)... SQL nic takoveho neobsahuje, dovolim si pripomenout, ze SQL je nadmnozina techto tri jazyku: DDL, DML, DQL (uz jsem to psal mockrat)
- nevim proc by se na "urovni psql" mely implementovat takove zhyralosti jako cykly apod. - nedelejme z konzoloveho nastroje neco, cim nema byt... - copak isql (Sybase), oraclovsky cmd line atd. ma takoveho nesmysly implementovany? Kdyz uz po tom tak touzite, doporucuji Vasi pozornosti nastroj, ktery se jmenuje pgbash pgsh ci jak to je - proste Shell + PostgreSQL - nevim presne nazev. Treba ve zminenem ESQL si klidne SETy provadim dle libosti...
- jako vzor PostgreSQL bych videl spise Informix nez Oracle, a to nejen v historii... On totiz Oracle zase tak moc veci "neprinesl", ale spise pouzil.
- Stored procedury jsou krasne, ale - pouzivaji se hlavne PRO URYCHLENI nejake cinnosti (oproti treba JDBC), na zpracovani DML - tedy triggery apod., takze vyvojare jeste ceka podstatny kus cesty. V tuto chvili mi to pripada jako marketingova fajfka - "mame"
- vycitani nemoznosti dynamicke kompilace myslim neni fer - stored procedury jsou prave elementy, ktere se maji jednou zkompilovat a pak pouzivat, nikoli kompilovat "dynamicky" - copak je problem tu chybejici dynamicnost realizovat pres vstupni parametry?
Dekuji za clanek, utvrdil jste mne, ze o MySQL stale nemusim zavadit:-) - pripadlo mi vsak nefer "vycitat" PostgreSQL nejake super (IMHO hloupe) vlastnosti MySQL... - nejsem nestranny, porovnavam vsak z pohledu "velkych" databazi, nikoli pouze z uhlu PostgreSQL.
Na to, ze v Cechach propaguju prave PostgreSQL, tak se neda predpokladat, ze bych PostgreSQL nejak hanil, ze :->. Viz web: postgresql.ok.cz, ktery udrzuji.
(v pohodlí práce s příkazovou řádkou má stále databáze s delfínkem co dohánět), tj. MySQL je na tom hur. Obe databaze pouzivaji readline, MySQL5 ma autocomplete prvnich slov prikazu. PostreSQL podstatne inteligentnejsi, tj. vcetne nazvu tabulek, sloupcu, atd.
Parametrizovane dotazy, mel jsem na mysli spis funkcionalitu, kterou mohu bezne pouzit, aniz bych musel neco programovat. Ala Prepare a Execute. PostgreSQL nema podporu uzivatelskych session promennych, vyjma jakesi podpory v psql.
Proc by se psql mohlo umet konstrukce: vetveni a cykly. Protoze ne kazdy ma pgbash nainstalovany. hrozne rad bych mel v psql moznost poustet treba procedury v PL/pgSQL lokalne. Zjednodusi se tim napriklad generovani inicializacnich skriptu, parametrizace, a ja nevim co dalsiho. Samosebou, ze to tam nemusi byt. Mohu pouzit Perl, Python, ECPG, cokoliv jineho. Nevidim duvod, proc by to tam byt ale nemelo - navic jsem si to nevymyslel.
Co treba pouziti SP pro servisni zasahy, monitorovani, kontrola dat, manipulace s daty, atd. Mohu si napsat C program, kod SP je ale jednodussi a prehlednejsi (alespon pro mne) (je v ToDo PostgreSQL).
Provadeni kodu v PL/pgSQL je velice rychle. Problem nastane v okamziku pouzivani docasnych tabulek. Problem to je - kod je pak dost necitelny, a i sami vyvojari to chapou jako problem (opet ToDo PostgreSQL).
V clanku jsem vubec nechtel vynaset super vlastnosti MySQL, naopak chtel jsem si vyzkouset co je na tech oslavnych odach (ale MySQL miri do podnikove sfery) pravda. Zaver je ten, ze PostgreSQL je nekde jinde - jak resenim, tak cilema, ale o MySQL se neda rict, ze se o ni neda ani zavadit. Vyvojari udelali hodne, jak s priblizenim norme, tak ve funkcionalite. A maji vlastni nazor jak to delat. Vic jsem netvrdil a ani bych si nedovolil tvrdit. Volba softu by mela zalezet na ucelu, znalostech programatora, uzivatelu, financich, fy. specifikam. Pro MySQL se prostor urcite najde (taky mi vadi "naburela reklama" MySQL AB). Napriklad moznost prilinkovat MySQL k vlastni aplikaci bude pro hodne lidi zajimava. Tohle PostgreSQL nebude umet.
Vyjadrim se k SP - to ze sou rychlejsi je spis side effect. Pouzivaj se k nekolika vecem:
* Bezpecnost. Zadnej login s vyjimkou admina nemuze vic nez spoustit urcity SP. To ti dava kontrolu nad tim co kdo muze.
* Abstrakce. Pokud zmenim strukturu dat (treba prejmenuju sloupec nebo rozdelim tabulku na dve) tak v pripade SPs jen prepisu SP, kod co ji pouziva o tom nebude ani vedet. Pokud bych pouzival adhoc dotazy tak bych musel do vsech produktu co dany objekt pouzivaj a prepisovat (a prelozit, otestovat, rozdistribuovat a tak dal).
Ok, vic me nenapada, ale tyhle dva duvody maj za nasledek treba to ze muj kod uz zadny inline SQL nepouziva, uplne vsechny akce s databazi jdou pres SP.
A jako vzdycky - na nejakou osobni stranku kde mam v DB seznam mych vyplodu je to putna...