Exécuter des instructions SQL depuis un fichier

Informations[1]

Objectif

  • Savoir exécuter des instructions SQL depuis un fichier.

Mise en situation

Il est assez fréquent d'avoir une liste d'instructions SQL pré-définies à exécuter.

Vous pourriez recevoir le code SQL pour créer la structure d'une base de données à des fins de test, par exemple. Ou vous pourriez vouloir migrer une base de données de MySQL vers une base de données PostgreSQL, ce qui se traduira par l'exécution d'un long code SQL pour reconstruire la structure des tables et insérer les données dans PostgreSQL.

Dans ces cas, il est intéressant d'exécuter un fichier contenant une liste de requêtes SQL, plutôt que de les entrer une par une dans un client, ou de les copier-coller.

Syntaxe

Pour exécuter un fichier contenant du code SQL, utiliser la commande PostgreSQL \i chemin/fichier.sql :

  • chemin désigne le répertoire dans lequel est le fichier fichier.sql,

  • Le dossier de travail de psql est le dossier dans lequel il a été lancé, le script peut être lancé à partir de son dossier home pour en être indépendant (~/.../fichier.sql),

  • Chaque commande doit être terminée par un ;.

1
user=> \i chemin/fichier.sql 

MéthodeProgrammer une base de données avec PostgreSQL

Pour programmer une base de données sous PostgreSQL, voici une méthode générale :

  • Rendez-vous dans un répertoire de travail : cd /home/me/bdd1.

  • Créez ou ouvrez un fichier texte bdd.sql avec un éditeur de texte.

  • Ouvrez un terminal et exécutez votre client psql.

  • Écrivez votre code SQL, et testez-le au fur et à mesure : \i bdd.sql.

ConseilTester votre code régulièrement

Afin de tester régulièrement votre base de données, pensez à insérer en début de script des instructions de destruction des tables.

On supprime les tables dans l'ordre inverse de leur création, on peut ajouter la clause IF EXISTS afin d'éviter les erreurs lorsqu'une exécution précédente avait déjà échoué.

1
DROP TABLE IF EXISTS t2 ;
2
DROP TABLE IF EXISTS t1 ;
3
CREATE TABLE t1 (a VARCHAR PRIMARY KEY);
4
CREATE TABLE t2 (a VARCHAR REFERENCES t1(a));