Come ben sapete sto approfondendo il mio rapporto con Django e, come tutti per tutti framework per applicazioni Web, è fondamentale interagire con un database. Così ho deciso di installarmi in locale un database e, tanto per provare cose nuove, ho deciso di non usare MySQL ma provare PostegreSQL.
A dire la verità la scelta va oltre il semplice diletto. Conoscerete senz’altro le vicissitudini che affliggono MySQL dopo l’acquisizione di Sun da parte di Oracle (già sviluppatore di un noto database). Il futuro di MySQL è quindi incerto e il suo fork comunitario MariaDB, creato dallo stesso programmatore originario di MySQL, sembra ancora lontano dall’avere una comunity stabile e progetti futuri soddisfacenti.
Esiste però un alternativa piuttosto famosa anche se non ha mai avuto la stessa diffusione del suo diretto concorrente: PostgreSQL. Questo db non ha un azienda alle spalle ed è quasi esclusivamente frutto della comunità cosa che comunque ci fa ben sperare che non faccia mai la fine del collega. Inoltre vanta una serie di features che non mi risulta siano presenti in MySQL (ma potrei sempre sbagliarmi) e, soprattutto, risulta più performante se associato a Django.
Detto questo, ci sono tutti i presupposti per provarlo. Il processo di installazione è del tutto automatico, tuttavia, ci sono alcuni passaggi che mi hanno fatto perdere parecchi minuti perché poco chiari. Ed è proprio su quelli che mi concentrerò.
Innanzitutto installiamo il programma:
$ apt-get install postgre
Questo comando installerà automaticamente l’ultima versione stabile del DB (attualmente la 8.4). L’imminente versione 9.0 è anch’essa presente nei repo di Debian Sid tuttavia non installa a causa di una mancata dipendenza.
Una volta installato dobbiamo infilare una serie di comandi che non vi sarebbero mai venuti in mente:
Password:
# su postgres
Questo vi permetterà di accedere all’utente amministratore di PostgreSQL. Una volta che siamo loggati dobbiamo abilitare il nostro utente “normale” alla modifica del db. Per fare questo dobbiamo creare un utente per il database (che prendono il nome di ruoli).
Enter name of role to add: thek3nger
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
CREATE ROLE
Ovviamente al posto di “thek3nger” metterete, per semplicità, il nome utente che usate per accedere al vostro sistema.
A questo punto il vostro utente avrà pieno controllo del db e potete farci quello che vi pare. Vi consiglio inoltre un utility grafica per accedere al db:
apt-get install pgadmin3
Così potete evitare di dover imparare a memoria tutti i comandi SQL di PostgreSQL.
Per i miei esperimenti locali ho sempre fatto affidamento a SQLITE (non ho particolari esigenze di prestazioni quando prototipo). Per il resto PostgreSQL è un DBMS relazionale veramente ottimo. MySQL non è assolutamente altrettanto completo (e nemmeno vuole esserlo visto che ha un target completamente diverso). Tutti e 3 (ci infilo anche SQLITE che è utilizzatissimo) sono secondo me perle del mondo open.
Mi sfugge una cosa: non hai dovuto modificare il file pg_hba.conf per far si che l’utente ‘normale’ possa autenticarsi tramite password?
Se ti può interessare, qui trovi una lista di comandi postgresql equivalenti a quelli più usarti di mysql (che se amministri postgres da terminale sono fondamentali):
http://daniel-strae.posterous.com/mysql-2-postgresql-common-commands
…e una chicca: http://explain.depesz.com/
Io ho fatto esattamente tutto quello scritto nel post. 🙂 Infatti quel post è più un appunto per me stesso che qualcosa con uno scopo illustrativo.
Grazie per i link! 😀