Da Microsoft Access a PostgreSQL: convertire lo schema di un database

Nello sviluppo di una mia applicazione (di cui si parla, per vari aspetti qua e qua) mi trovo a dover effettuare una operazione alquanto “critica”, ovvero convertire un database realizzato con microsoft access per poterlo utilizzare con PostgreSQL, importando i dati e poi ridisegnando tutto il db. Vediamo come effettuare l’operazione di migrazione dello schema dati.

Lo schema da migrare

Lo schema che mi trovo a dover migrare è composto da 65 tabelle, per un totale di 100000 record. Il primo passo è quello di importare la definizione delle varie tabelle. Qua ci sono subito dei problemi.

  1. Estrarre la definizione del DB.
  2. Creare il file SQL corrispondente per l’import e realizzare l’import vero e proprio.

L’utility per l’analisi della struttura dei database di Microsoft Access è l’insieme di programmi che fanno capo al progetto MDB Tools. In particolare utilizzerò l’utility mdb-schema per estrarre la definizione dello schema.

L’utilizzo è semplice, almeno a prima vista. Infatti basta lanciare il comando

mdb-schema -S database.mdb postgresql

per avere a video lo schema del database. L’opzione -S inserisce degli underscore “_” al posto degli spazi.Qua però iniziano i problemi. Lo schema SQL generato contiene alcune imperfezioni che non lo rendono utilizzabile per un import diretto in PostgreSQL.

Come prima cosa i nomi delle tabelle e dei campi sono un mix di maiuscolo e minuscolo, cosa che non è bella per postgreSQL. per cui il primo passo è quello di prendere riga per riga le stringhe in output e convertire tutti i caratteri in minuscolo. Qua viene in aiuto la mia esperienza di sistemista Linux. Una semplice pipe del comando precedente con

tr "[:upper:]" "[:lower:]"

realizza quanto serve. Ora però c’è ancora una cosa che non va. mdb-schema è un ottimo tool, peccato che quando incontra colonne di cui non conosce il corrispettivo postgreSQL si limita a mettere come tipo di dati un “postgres_unknown 0×0c”. Per cui serve un’altra semplice sostituzione, da realizzare con sed

sed -e  "s/postgres_unknown 0x0c/text/g"

A questo punto il file SQL è pronto. Ultimo dettagli è quello di commentare (con i 3 meno “—” le stringe di drop delle tabelle, visto che il DB che uso è vuoto e le tabelle non esistono).La stringa da dare a riga di comando sarà, mettendo tutto assieme

mdb-schema -S db-orig.mdb postgres |  tr "[:upper:]" "[:lower:]" | sed -e  "s/postgres_unknown 0x0c/text/g" | sed -e "s/drop/---drop/g" > sql/mdb-dump.sql

One Response to “Da Microsoft Access a PostgreSQL: convertire lo schema di un database”

  1. Ghillie Suits » Da Microsoft Access a PostgreSQL: convertire lo schema di un database Says:

    [...] Check it out! While looking through the blogosphere we stumbled on an interesting post today.Here’s a quick excerptConveritre un database access in postgresql è un’operazione che necessita di un pò di accorgimenti ma che è ben realizzabile utilizzando solo programmi liberi in Linux. Vediamo come fare utilizzando gli ottimi mdb-tools e<sep/> [...]

Leave a Reply

You must be logged in to post a comment.