Postgresql su mac tramite buildout

Una semplice configurazione del buildout per installare e configurare postgresql su macosx

Nella mia ordinaria attività di sviluppo spesso mi capita di utilizzare postgresql e sovente riesco a cavarmela senza doverlo installare utilizzando sqlite per i test. A volte però tutto ciò non funziona in quanto ogni database possiede alcune specifiche funzioni che non è possibile astrarre attraverso un ORM.

Per tale motivo ho deciso di crearmi una piccola configurazione aggiuntiva per i miei buildout che mi permettano facilmente di avere il mio buon postgresql installato e funzionante senza dover installare i pacchetti specifici per il mio sistema operativo. In questo modo sono anche libero di scegliere la versione e le configurazioni che più mi aggradano limitandone l'utilizzo ad uno specifico progetto.

Configurazione del buildout

Queste sono le parti aggiuntive che occorrono al buildout:

[buildout]
extends =
...

parts +=
    postgresql
    init-pgsql
    pgsql-symlinks
    psycopg2
    startscript

eggs +=
${psycopg2:eggs}

Installazione di Postgresql

La prima sezione importante si occupa di scaricare, compilare ed installare postgresql in una specifica directory:

[postgresql]
recipe = hexagonit.recipe.cmmi
url = http://[link_al_repository_di_postgresql]/postgresql-8.4.6.tar.gz
configure-options =
  --with-readline
  --enable-thread-safety

Non ho utilizzato la più classica ricetta zc.recipe.cmmi in quanto fino alla versione 1.3.4 mi vincolava all'uso di zc.buildout < 1.5 e non potevo aspettare un aggiornamento.

Inizializzazione di Postgresql

La ricetta iw.recipe.cmd si occupa di eseguire tutti i comandi necessari all'inizializzazione dell'installazione di postgresql compresa la creazione di un utente del suo db ecc... in poche parole posso eseguire un qualsiasi comando.

[init-pgsql]
recipe = iw.recipe.cmd
on_install = true
on_update = false
cmds =
    ${postgresql:location}/bin/initdb -D ${postgresql:location}/var/data -E UNICODE
    ${postgresql:location}/bin/pg_ctl -D ${postgresql:location}/var/data start
    sleep 30
    ${postgresql:location}/bin/createuser -s -D nome_utente
    ${postgresql:location}/bin/createdb -E UTF8 nome_db
    ${postgresql:location}/bin/createlang -d nome_db plpgsql
    ${postgresql:location}/bin/pg_ctl -D ${postgresql:location}/var/data stop

Per comodità posso creare una serie di link simbolici nella mia cartella bin che puntano ai corrispettivi comandi postgresql.

[pgsql-symlinks]
recipe = cns.recipe.symlink
symlink_target = ${buildout:directory}/bin
symlink_base = ${postgresql:location}/bin
symlink =
    clusterdb
    createuser
    dropuser
    pg_config
    pg_dump
    pg_restore
    psql
    createdb
    dropdb
    ecpg
    pg_controldata
    pg_dumpall
    postgres
    reindexdb
    createlang
    droplang
    initdb
    pg_ctl
    pg_resetxlog
    postmaster
    vacuumdb

Moduli Python

Infine, come ultima cosa posso installare il modulo pyhton psycopg2 includendo le librerie postgresql corrette.

[psycopg2]
recipe = zc.recipe.egg:custom
eggs = psycopg2
include-dirs =
    ${postgresql:location}/include
library-dirs =
    ${postgresql:location}/lib

Avvio di Postgresql

Una volta eseguito il buildout posso avviare postgresql con il comando:

./bin/postgres -D ./var/data

ma siccome sono pigro mi posso creare un ulteriore piccolo script nella cartella bin così da non dovermi ricordare il comando ogni volta:

[startscript]
recipe = collective.recipe.template
input = ${buildout:directory}/postgresql-start.sh.in
output = ${buildout:directory}/bin/postgresql-start

Quest'ultima ricetta mi permette di creare un file di testo partendo da un template in cui posso utilizzare tutte le variabili disponibili nel mio buildout. Creo quindi un template che includa il comando visto precedentemente ed il gioco è fatto.

#!/bin/bash
${postgresql:location}/bin/postgres -D ${postgresql:location}/var/data

Share this on

Share |

On same topics

Commenti

comments powered by Disqus