Visualizzazione post con etichetta PostgreSQL. Mostra tutti i post
Visualizzazione post con etichetta PostgreSQL. Mostra tutti i post

lunedì 7 gennaio 2008

Appuntamento con OilProject: DBMS a confronto

Preambolo

Stasera volevo vedermi un film,per cui ho iniziato a prenderne uno a caso dalla mia raccolta: "Un ponte per Terabithia". Beh a metà film ho smesso. Trattasi di ragazzini dalla fervida immaginazione,fervida a tal punto da arrivare a crearsi un mondo tutto loro.
Deciso a non arrendermi ho optato per "Fascisti su Marte",del buon Guzzanti. Sebbene possa sembrare carino per i primi 5 minuti,dopo diventa anch'esso schifosamente noioso. Dunque mi son detto che non era serata per i film e ho deciso di apporfondire un po' le mie conoscenze con qualche lettura che avevo a disposizione.

DBMS a confronto

Si intitola così la presentazione (disponibile in PDF o ODP,ma c'è anche l'MP3 che presenta i suoi lavori) di Nello Coppeto (aka NeCoSi),autore del sito web Geekplace e mebro della oilprojectcommunity di OilProject.
Il suo lavoro mette a confronto da un punto di vista generale e scarsamente tecnico i tre principali DBMS in circolazione:

- MySQL;
- Oracle;
- PostgreSQL;


Oracle

Nasce dal '77 e prosegue la sua evoluzione fino ad arrivare alla versione 10g del 2003,ora surclassata dalla 11g come mi fa notare un lettore. Esistono ben 5 versioni di Oracle che con mia grande sorpresa costano migliaia di dollari: si va dai 18 mila ai 275 mila dollari per licenze della versione enterprise edition a tempo indeterminato con supporto e aggiornamenti,senza contare che gli optional sono anch'essi a pagamento.
La versione liberamente scaricabile è la Express Edition,che nell'aprile del 2006 viene premiato da non ricordo chi come miglir database. Viene delineato un tratto monopolista di Oracle,che fa addirittura proposte d'acquisto di MySQL e JBoss.
Essendo software chiuso e basando la sua sicurezza su ciò che non si conosce (la più bassa forma per intenderci) ha avuto un record di inefficienza nella bug correction: quasi 2 anni per una patch!!

MySQL

Sviluppato a partire dal '95,viene usato nell'architettura LAMP e da Wikipedia,chi non lo conosce? Quel che non sapevo è che avesse due licenze:

  • GPL;
  • commerciale: se acquisto questa licenza e se modifico e distribuisco il software posso scegliere anche questa licenza e venderlo,annullando la viralità della GPL;

Scitto in C/C++,ha estensioni per altri DBMS come PostgreSQL. Questo non so a che livello si estenda. Supporterà le stored procedure e le funzioni trigger di PG?
Vanta numeri per 30 mila download al giorno su 5 milioni di installazioni globali.

PostgreSQL

La prima versione risale all'89 e questo DBMS open source arriva ad oggi alla versione 8. Ha una licenza BSD,quindi molto flessibile.
PostgreSQL ho avuto modo di studiarlo e approfondirlo un pochino quest'anno nel corso di basi di dati (mentre per Nello è toccato Oracle). Potete vedere i miei appunti su PotsgreSQL a questa pagina.

Conclusioni

Ho trovato la sua esposizione interessante,tant'è che ve ne sto parlando e vi invito a dargli una buona lettura (e ascolto) soprattutto se siete indecisi su quale DBMS scegliere per i vostri tornaconti e volete farvi una panoramica,anche perchè alla fine dei fatti potete scaricare liberamente dalla rete una versione di qualsiasi di questi tre DBMS.
Potete trovare i lavori di Nello su Oilproject oppure da me nella sezione riservata alle letture libere.

domenica 25 novembre 2007

Creare una funzione plpgsql che prelevi i dati di una select attraverso un ciclo

Mi ci è voluto un attimo per capire come funzionasse ma alla fine eccola qua la funzioncina che preleva i ricoveri di un paziente del mio progetto di basi (che ritornerà ad esser scaricabile non appena avrò passato l'esame):


create or replace function dati_ricovero(varchar) returns setof ricovero as $$
DECLARE
t ricovero%ROWTYPE;
BEGIN
FOR t IN
select r.*
from ricovero r,account_pazienti u,paziente p
where u.codiceweb=p.codiceweb AND u.username=$1
AND p.ssn=r.ssn
LOOP
RETURN NEXT t;
END LOOP;
END;
$$ LANGUAGE 'plpgsql';

lunedì 19 novembre 2007

PostgreSQL e la funzione sleep

Può capitare che per alcune esigenze di simulazione occorra simulare un ritardo di esecuzione oppure come nel mio caso,facendo una serie di inserimenti dietro l'altro nei quali la chiave primaria è la funzione now(),ci ritroviamo con dei bei errori perchè la funzione now() viene richiamata talmente velocemente da ritornare il medesimo risultatoi per un buon numero di statement.
In questa pagina vien emostrato come costruire una funzione plpgsql che simuli una sleep tramite un ciclo oppure usare la sleep di PERL avendo questo linguaggio a bordo e avendo caricato la libreria con CREATE LANGUAGE.

create or replace function sleep (numeric) returns time as '
declare
seconds alias for $1;
later time;
thetime time;
begin
thetime := timeofday()::timestamp;
later := thetime + (seconds::text || '' seconds'')::interval;
loop
if thetime >= later then
exit;
else
thetime := timeofday()::timestamp;
end if;
end loop;

return null;
end;
' language plpgsql;


mercoledì 17 ottobre 2007

Progetto basi di dati

Vi lascio come promesso con il link per il download del progetto di basi di dati di quest'anno,si trova in fondo a questa pagina. Tanto bel codice che non può trovar posto che in uno zippo,non di certo su un blog! Quindi se volete approfondire gli accessi in PHP tramite cookies,funzioni SQL e PLPGSQL di PostgreSQL e come si crea un database (dallo schema ER sebbene mostri qualche errore allo schema relazionale) allora scaricatevi lo zippo e dateci un'occhiata.
Per farlo funzionare dovete prima creare in PG un database di nome ospedale e un superutente di nome postgres con password post. Scusate ma nn ho raccolto utto in un unico file di funzioni,perchè non me ne fregava nulla,piuttosto ci sono connessioni al database un po' qua e un po' là,quindi al massimo modificate a mano gli scripts se non volete cambiare la password al vostro utente postgres,nel caso ne abbiate già uno :)
EDIT: il file del progetto è stato temporaneamente rimosso. Entro una settimana una nuova versione del progetto vi troverà posto.

venerdì 5 ottobre 2007

SQL:tutorial e documentazioni

Riassumendo Mashable,un buon punto di partenza sicuramente sono le documentazioni ufficiali offerte dai DBMS. Vediamone una breve lista:
Lo standard si sa,è variegatamente implementato nei vari DBMS e qui potete vederne alcune differenze.
Dopo di che è il caso di cercarsi tutorial o leggerse libri al riguardo:
Come seconda cosa andiamo ad indicare editor disponibili: per primo cito quello che non è proprio un editor ma un formattatore di istruzioni SQL,incapsulabili anche in un altro linguaggio quale PHP o Java. Possiamo usare anche PHPMyAdmin (o PGAdmin per PostgreSQL,cmq software analoghi) per imparare il linguaggio: se non ci accontentiamo di usare la grafica bella e pronta ma immettiamo le query testualmente,otterremo gli stessi risultati ma essendo consapevoli di quello che avviene sotto le quinte.
Un altro editor è WWW SQL Designer,che agisce via browser dopo aver settato connessioni al database.

martedì 25 settembre 2007

MySQL Vs PostgreSQL: sequenze a confronto

Come sempre in questo periodo (fino a domani,giorno di consegna),sono impegnato nel progetto di basi di dati (che poi pubblicherò),il quale coinvolge PHP e PostgreSQL. Devo dire che PostgreSQL è un buon DBMS,ho approfondito le procedure SQL e i trigger tramite funzioni PLPGSQL.
Una nota dolente è stata la scoperta della gestione delle sequenze: mentre per MySQL possiamo definire così una sequenza (per esempio):

id int auto_increment primary key
In PostgreSQL ci sono due modi (uno rapido e uno più elaborato). Modo rapido:

/* il seguente codice crea implicitamente una sequenza,creiamo il campo id nella tabella omettendo alcuni passaggi */
id serial primary key
E un modo più elaborato (vedi funzioni per le sequenze):

CREATE SEQUENCE tablename_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647;
-- creiamo il campo id nella tabella omettendo alcuni passaggi
id int DEFAULT nextval('tablename_id_seq') primary key
E fin qua ci siamo. Ammettiamo che facciamo una serie di INSERT specificando gli ID:

INSERT INTO table (ID,BLA,BLA) VALUES(1,'dato','dato');
In questo caso, dopo tali INSERT, se facciamo un inserimento SENZA specificare l'ID, MySQL sarà abbastanza scaltro da prelevare l'ultimo ID nella tabella e incrementarlo di uno mentre invece PostgreSQL richiamerà la sequenza creata (o quella implicita se usiamo serial),siccome non l'abbiamo mai usata, produrrà 1 come risultato,con la possibilità molto facile di causare un errore di duplicazione delle chiavi (1 è magari già presente nella tabella).
Per questo concludo dicendo che in PostgreSQL è bene non specificare gli ID ma lasciare che sia la sequenza a farlo per noi,mentre in MySQL non ci sono problemi di sorta.

martedì 18 settembre 2007

Cambiare le password degli utenti in PostgreSQL

Per cambiare le password agli utenti del DBMS,siccome gli utenti sono dei ruoli che possono effettuare il login,è sufficiente usare il comando ALTER ROLE per modificare una password:


ALTER ROLE username SET PASSWORD TO pass