TP postgres Sommaire 1- Installation de postgres sur vos racks Windows OU 2- Installation de postgres sur vos comptes UNIX 3- Connexion a la DB 4- Description de la base / des tables 5- Exécution de scripts 6- Sauvegarde de vos requêtes et sorties 7- Commandes utiles 8- Exercices sur les fonctions qui divergent d Oracle - fonction DECODE - fonction NVL - fonctions ADD_MONTH / ADD_DAYS - fonction TO_CHAR (formatage de sortie) - Tables virtuelles - Implémentation de séquences dans une table. - Clause LIMIT nbr OFFSET start
1- Installation de postgres sur vos racks Windows -Download postgres 8.0.4 from : http://wwwmaster.postgresql.org/download/mirrorsftp?file=binary%2fv8.0.4%2fwin32%2fpostgresql-8.0.4.zip -Unzip the file in a temporary directory - launch postgresql-8.0.msi - choose the english version - start press next * 2 Don't change the configuration and go to the next step. keep the original configuration and enter a password. The installer will create an account whitout privilege
press next press Yes If you've entered a weak passsword click on No Select "Initialize database cluster", enter a password (same as postgres account), then press next
Next like the exemple Next like the exemple Next The installation would take 2 or 3 minutes then press Finish.
-Start the service "PostgreSQL DataBase Server 8.0" - Start pgadmin III create a new database called "postgres" with the owner "postgres" - Quit pgadmin III -Launch a command prompt with the user postgres (run as postgres) C:\WINDOWS\system32>"C:\Program Files\PostgreSQL\8.0\bin\psql.exe" Password: Welcome to psql 8.0.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit Warning: Console code page (437) differs from Windows code page (1252) 8-bit characters may not work correctly. See psql reference page "Notes for Windows users" for details. postgres=# Fin de votre installation Windows.
2- Installation de postgres sur vos comptes UNIX Premièrement: Créez un répertoire pour mettre la base dedans. ex : $>mkdir ~/exam Deuxièmement : Créez un script nomez install.sh qui comportera ceci : #!/bin/sh USAGE="Usage: $0 path_to_database" die_usage() { echo -e $USAGE; exit 1 } [ "x" = "x$1" ] && die_usage DBNAME="ecole" PGDATA=$1 [ -d $PGDATA ] mkdir $PGDATA /usr/pkg/bin/initdb -D $PGDATA /usr/pkg/bin/pg_ctl -D $PGDATA start /usr/pkg/bin/createdb $DBNAME $DBNAME Troisiement : On lance le script comme suit: $>./install.sh ~/exam Faite attention pas de / à la fin du nom de répertoire N.B: ~/exam c'est le path de mon répertoire faite attention au votre Quatrièmes : Ca donne ca ----------------------------------------------------------------------------- (saidi_m@cccp 3)./install.sh ~/test The files belonging to this database system will be owned by user "saidi_m". This user must also own the server process. The database cluster will be initialized with locale C. Fixing permissions on existing directory /u/ept4/saidi_m/test... ok creating directory /u/ept4/saidi_m/test/base... ok creating directory /u/ept4/saidi_m/test/global... ok creating directory /u/ept4/saidi_m/test/pg_xlog... ok creating directory /u/ept4/saidi_m/test/pg_clog... ok creating template1 database in /u/ept4/saidi_m/test/base/1... ok creating configuration files... ok initializing pg_shadow... ok enabling unlimited row size for system tables... ok initializing pg_depend... ok creating system views... ok loading pg_description... ok creating conversions... ok setting privileges on built-in objects... ok vacuuming database template1... ok copying template1 to template0... ok Success. You can now start the database server using:
/usr/pkg/bin/postmaster -D /u/ept4/saidi_m/test or /usr/pkg/bin/pg_ctl -D /u/ept4/saidi_m/test -l logfile start postmaster successfully started LOG: database system was shut down at 2005-05-24 17:13:11 CEST LOG: checkpoint record is at 0/7FF310 LOG: redo record is at 0/7FF310; undo record is at 0/0; shutdown TRUE LOG: next transaction id: 480; next oid: 16976 LOG: database system is ready CREATE DATABASE COMMENT ------------------------------------------------------------------------------- Si vous avez reçu FATAL ERROR ;) la solution relancez le script si ca continue changer de machine N.B: EN SE DELOGUANT DE LA MACHINE VOUS PERDEZ LA CONF POSTGRES, LA MACHINE NE SERA PLUS UTILISABLE POUR POSTGRES AVANT UN REBOOT ET ENCORE. (Cela veut dire changez de machine) En bref : tant que vous êtes sur la machine ca marche, si vous quitter c'est perdu il faut tous refaire =D Cinquième étape : $>psql ecole Welcome to psql 7.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit ecole=# Votre installation sur votre compte UNIX est fini vous pouvez donc utilisez postgres
3- Connexion a la DB SYNOPSIS psql [option...] [dbname [username]] EXAMPLES psql ecole database Connect to the database ecole without specifying the username and the password. 4- Description de la base / des tables \d [ pattern ] Describe the structureof current Database (views, tables, sequences, ) \d+ [ pattern ] List all relations or only those matching the pattern. \db [ pattern ] \db+ [ pattern ] List all tablespaces or only those matching the pattern. \dt [ pattern ] \dt+ [ pattern ] List all data types or only those matching the pattern. \du [ pattern ] List all database users or only those matching the pattern. 5- Exécution de scripts \i script.sql Import the script script.sql in the current database.
6- Sauvegarde de vos requêtes et sorties In the shell environment psql database < script.sql Import the script script.sql to the database database. psql database f script.sql Import the script script.sql to the database database. psql database c command Import the command command to the database database. Exporting a query In psql \w [ {output command } ] Save the future query in the file output or pipe to execute command. You should first type your request and after that execute the \w filename command to save your request. In the shell environment Run your emacs or text editor and type directly the query. Exporting the output of a query In the shell environment psql database > output Export the output of the query in the buffer in the file output. psql database o output Export the output of the query typed in psql in the file output. In psql \o [ {output command } ] Save the future output of a query in the file output or pipe to execute command. $> \o filename(\n) should be type before the request with the filename of the output and just after the request was done you must type only $> \o (\n) to stop printing output in file. \g [ {output command } ] Hardly the same. But \g command should only be typed after you had run your request. 7- Commandes utiles \h Print the help for SQL commands. \? Print the help for psql commands.
8- Exercices sur les fonctions qui divergent d Oracle Pour réaliser les exercices ci dessous veuillez lancer les scripts de la base école que vous trouverez dans le répertoire TP5. Toutes les questions devront être réalisées sous ORACLE et Postgres a) Manipulations ex_1.sql, out_1.sql Décrivez la structure détaillée des tables de votre base. ex_2.sql, out_2.sql Décrivez la structure de la table étudiants. b) fonction DECODE ex_3.sql, out_3.sql Listez pour chaque étudiant, le nom, le prénom et un champ appelé qui aura pour alias CALC et qui sera obtenu comme suit : Si le nom est par exemple SPANNAGEL et le prénom est loïc, le champ CALC sera SIX_L. Partant du fait qu il y a 6 caractères ou plus dans le nom, le champ CALC commence par SIX. Si le nom est par exemple SAIDI et le prénom est mouhssine, le champ CALC sera CINQ_M. Le résultat est à ordonner selon le champ CALC. ex_4.sql, out_4.sql Affichez le nom, le prénom, la note, ainsi qu un champ commentaire qui aura pour alias CMT (qui sera défini par la règle qui suit) pour les étudiants ayant obtenus des notes dans n importe quel examen (il suffit que l étudiant figure dans la table obtenir_note). Le résultat est à ordonner par note, puis nom, puis prénom. Si 11 <= Note <= 13 => Le commentaire est: ASSEZ_BIEN Si 14 <= Note <= 17 => Le commentaire est: BIEN Si 18 <= Note <= 20 => Le commentaire est: EXCELLENT c) fonction NVL (modifier dans le script pour que la requête marche) ex_5.sql, out_5.sql Donnez la liste des étudiants (identifiant, nom, prénom) qui n ont jamais eu (obtenu) un zéro tout examens confondus, en mettant le commentaire «absent» si l étudiant n a pas de note pour cette exam. Ordonnez le résultat par l identifiant étudiant. ex_6.sql, out_6.sql Donnez la moyenne obtenue par les étudiants, sachant que celle-ci est égale au rapport de la somme des notes obtenues aux examens par le nombre d examens passés par cet étudiant. Ordonner le résultat par l identifiant étudiant.
d) fonctions ADD_MONTHS / ADD_DAYS ex_7.sql, out_7.sql Le directeur de l école vous demander de lui faire des statistiques sur les examens. Il aimerait reculer les examens de 6mois. En affichant le libelle exam et le champ «Stat» qui va contenir votre calcul. e) fonction TO_CHAR (formatage de sortie) ex_8.sql, out_8.sql Déplacer tous les cours de 10 jours et afficher le code cours, la date a laquelle il se déroulera et l heure sous la forme : Lundi le xx novembre xxxx de xx:xx heure a xx:xx heure f) Tables virtuelles ex_9.sql, out_9.sql Affichez les promotion(s) (tous les champs) qui ont le plus grand nombre d examens à l année pour toutes matières confondues. Ordonnez de manière dégressive le résultat par code promo. ex_10.sql, out_10.sql Donnez le nombre moyen d'examens prévus par matière toutes promotions confondues. Affichez le code matière et utilisez l'alias NPEX pour le champ Calculé, le résultat est à ordonner par matière (code matière). g) Implémentation de séquences dans une table. ex_11.sql, out_11.sql Créez la table PRFDS, qui est une copie de la table Professeurs avec une colonne supplémentaire DDE correspondant à la date d embauche, celle-ci sera par défaut initialisée à la date du jour (une seule requête). En fichier de sortie, afficher tous les enregistrements de la table PRFDS ex_12.sql, out_12.sql Puis créez une séquence SQ_PRF allant de 100 à 1000, s'incrémentant de 10. Afficher tous les champs de votre séquence en fichier de sortie. ex_13.sql, out_13.sql A la fin modifiez la table PRFDS pour qu à chaque fois que l'on insère une donnée dans la table, la clef primaire utilise la séquence comme valeur. En fichier de sortie décrivez la structure de la table PRFDS. ex_14.sql, out_14.sql Créez la table ETUD, qui est une copie de la table étudiants. En fichier de sortie afficher tous les enregistrements de la table ETUD
ex_15.sql, out_15.sql Puis créez une séquence SQ_ETUD allant de 200 a 1000, s'incrémentant de 4. Afficher tous les champs de votre séquence en fichier de sortie. ex_16.sql, out_16.sql A la fin modifiez la table ETUD pour qu à chaque fois que l'on insère une donnée dans la table, la clef primaire utilise la séquence comme valeur. En fichier de sortie décrivez la structure de la table ETUD. h) Clause LIMIT nbr OFFSET start ex_17.sql, out_17.sql Afficher les étudiants (identif, nom, prénom) classés par groupe (code groupe) puis par identifiant et limitez le résultat a l affichage de la ligne 10 à la ligne 15