Algorithmes et bases de données, année 2019

TD1: Introduction à PostgreSQL

L’objectif de ce TD:

  1. Se familiariser avec OpenStack.
  2. Installer PostgreSQL depuis les sources
  3. Fouiller dans les sources à la recherche d’informations
  4. [-Étre-] {+Être+} capable de faire fonctionner un exemple simple.

Ce TD suppose que vous êtes capable de chercher en autonomie dans la documentation de PostgreSQL présente sur internet ou dans les sources.

Utilisation d’OpenStack

Connectez vous à openstack et créez une instance Ubuntu avec le moins de ressources possibles. On utilisera éventuellement les ressources disponibles lors d’autres TP. Pour cela Suivez le tutoriel présent sur la plateforme. Configurez votre console local pour pouvoir vous connecter en ssh. Pour une instance ubuntu avec les clefs ssh configurées correctements il suffit de faire: ssh ubuntu@[adresse-ip]adresse-ip est l’adresse indiquée par la plateforme.

Remarques:

  1. Il est possible de se connecter de chez vous avec le VPN.
  2. Vous pouvez créez des instances avec d’autres versions de Postgres pour les tester ou même dans systèmes de bases de données.
  3. La création et suppression d’une instance est rapide, en cas d’erreurs de configuration bloquante, n’hésitez pas à tout jeter et recommencer.
  4. Vous pouvez devenir root facilement à l’aide de la commande sudo su. N’hésitez pas à faire des bêtises sur des instances de votre choix.
  5. Il est très pratique d’utiliser un multiplexeur de terminal comme screen ou tmux.

Télécharger les sources et compiler PostgreSQL

En suivant les indications dans les sources, installer localement un cluster PostgresSQL.

Pendant le temps de compilation, lancer une autre VM via openstack et installer PostgreSQL depuis les dépôts directement avec apt.

  1. Vérifier le répertoire où les binaires ont été placé et exécuter l’aide des programmes suivant:

    • pg_config
    • pg_ctl
    • initdb
    • createdb
    • createuser
  2. Lancer un cluster dans un répertoire de votre choix en exécutant d’abors initdb et en utilisant pg_ctl start avec l’option -D
  3. Créez un cluster dans un second répertoire. En le lançant avec pg_ctl vous avez une erreur. Comment la contourner pour avoir deux cluster simultanément sur la même machine.
  4. Créez une base de donnée dans le cluster de votre choix.
  5. Créez un utilisateur pouvant se connecter depuis n’importe quel domaine à l’aide de createuser et en éditant le fichier de configuration pg_hba.conf

Remarques:

  1. Les images OpenStack sont volontairement minimalistes. De nombreuses dépendances sont à installer.
  2. Vous aurez besoin de GNU readline qui est dans les paquets: make, libreadline-dev et zlib1g-dev
  3. Le plus simple est d’ajouter à la variable d’environnement globale le chemin vers les binaires (probablement /usr/local/pgsql/bin/) éditez et exécutez le fichier /etc/environment.

Une exploration des sources

Configurez PostgreSQL

Vérifier dans le fichier de configuration que le serveur écoute bien les connexions extérieures et essayez de vous connecter sur la machine distante et sur la machine locale.

Vous devrez également autoriser les connexions distantes via une authentification par mots de passe en éditant le fichier pg_hba.conf

Les logs de scihub.

Télécharger le jeu de données issue des logs d’un site pirate de publication scientifiques bien connus ici. Créez une base de données scihub et une table adaptée pour pouvoir l’importer dans la base de données.

Vous pouvez utiliser la commande \copy pour ça, qui est assez efficace (doc)

Quelques requêtes simple

  1. Trouvez tous les téléchargements réalisés à Lille.
  2. Trouvez tous les téléchargements du 31 Janvier.
  3. Retourner la table du nombre de téléchargements pour chaque pays

Pour chacune de ces requêtes, PostgreSQL vous indique l’algorithme exécuté via la commande Explain en fonction du modèle de coût configuré. En utilisant Explain Analyze vous pouvez également exécuter la requête et obtenir le coût réel.

Pour aller plus loin: Une normalisation simple

En relisant la page Wikipédia adaptée, proposez une renormalisation de cette table.