giovedì 18 dicembre 2014

Calendario dell'Avvento ITPUG: 18 Dicembre

Personalmente uso Emacs per quasi tutto, eccetto che per collegarmi ad
un database PostgreSQL.
Non che Emacs non possa farlo, ma semplicemente mi trovo meglio con psql per svariate ragioni, compreso il fatto che a volte devo accedere a macchine che non hanno Emacs installato (e non sono raggiungibili da macchine con Emacs installato). Ad ogni modo Emacs dispone di una serie di modi sql-* per svariati database, fra i quali ovviamente PostgreSQL.
Ora perché diavolo qualcuno dovrebbe collegarsi a un database tramite Emacs? Semplicemente perché inglobare il client dentro all'editor facilita lo scambio dati fra script, server, email, e qualunque altro buffer abbiate aperto (inclusi i commit per le versioni)!

Riporto una minimale configurazione per un ambiente con due database (ovviamente username e password sono inventati):

(add-hook 'sql-interactive-mode-hook
 (lambda ()
  (toggle-truncate-lines t)))

(setq sql-connection-alist
'((TEST (sql-product 'postgres)
    (sql-port 5432)
    (sql-server "localhost")
    (sql-user "demo")
    (sql-password "demo")
    (sql-database "demodb"))
 (PROD (sql-product 'postgres)
    (setq sql-port 5432)
    (sql-user "demo")
    (sql-password "demo")
    (sql-database "demodb") ) ) )


(defun pg-connect (which)).
  (interactive "SQuale connessione database?" )
    (setq sql-product 'postgres)
    (let ()
     (message "Connessione al database %s" which)
      (sql-connect which ) ) )


Anzitutto si abilita la modalità "linee lunghe", perché visualizzare l'output delle query con le andate a capo è abbastanza fastidioso. Poi si definiscono due database, nominati TEST e PROD, con i relativi parametri di connessione. Si possono definire quante connessioni si vuole.
Infine la funzione pg-connect chiede all'utente a quale database collegarsi: M-x pg-connect e poi si inserisce il nome del database (TEST o PROD).
Dopodiché emacs apre il prompt (psql) del database in un buffer separato.

Notare che questa configurazione funziona su Emacs 24.4.1 ma mi ha
dato qualche grattacapo su 24.3

Nessun commento: