Vous êtes sur la page 1sur 3

PostgreSQL

Interpréteur de commande postgreSQL

Il est nécessaire d’être sur codd pour appeler l’interpréteur de commande postgreSQL.

La commande pour lancer l'interpréteur postgreSQL est psql. Le nom de la base à


laquelle vous vous connecté est BD<login turing sans le 1>. Votre identifiant et votre
mot de passe sont votre identifiant turing moins le 1 devant.

Exemple pour l’utilisateur 1martinp


$> psql -U martinp BDmartinp
mot de passe: martinp

Quelques commandes :

\q : quitter postgreSQL
\d <table> : équivalent du DESCRIBE de sqlplus. Affiche le nom des colonnes
et leur type pour une table postgres

\h : liste des commandes SQL


\h <nom commande> : permet d'afficher la syntaxe complète d'une commande
\? : liste des commandes de l'interpréteur postgreSQL

\cd <rep> : changement de répertoire


\i <file> : exécuter les commandes d'un fichier SQL

Documentation postgreSQL

http://docs.postgresqlfr.org/8.0/

Changement de mot de passe

ALTER USER <login> WITH PASSWORD '<nouveau mot de passe>';

Dictionnaire de donnée

Les tables du dictionnaire commencent par pg_. Pour obtenir la liste complète des tables consulter
http://docs.postgresqlfr.org/8.0/catalogs.html

Pour obtenir la liste des tables, on peut aussi utiliser:

\d : affiche les tables créées par l'utilisateur.


\dS : affiche toutes les tables de la base.
Différences ORACLE et POSTGRESQL

Tests de fonction

La table DUAL n'existe pas sous postgreSQL. Pour tester des fonctions ou afficher la valeur
de variables, il suffit de faire des requêtes SQL sans clause FROM :

exemple: SELECT initcap('mARTIN');


-> 'Martin'

Différence entre les types oracle et postgreSQL

Type numérique
INTEGER existe pour les deux SGBD.
Oracle: NUMBER(p,s) <-> postgreSQL: NUMERIC(p,S)

Type caractère
CHAR(n), pour les chaînes de taille fixe, existe pour les deux SGBD.
Oracle: VARCHAR2(n) <-> postgreSQL: VARCHAR(N)

Type date
Le type DATE Oracle contient une date précise à la seconde près.
Le type DATE postgreSQL contient une date précise au jour près.

Le type date Oracle est similaire au type TIMESTAMP de postgreSQL.

Opérations autorisés sur les dates

Comme sous Oracle, il est possible de soustraire ou d'ajouter des jours à une date

ex: SELECT date '29-nov-2008' + 1;


-> 2008-11-30

Pour soustraire ou ajouter des intervalles de temps à un attribut de type TIMESTAMP, il


faudra utiliser une valeur de type INTERVAL.

ex: SELECT timestamp '29-nov-2008' + interval '1 day';


-> 2008-11-30 00:00:00

Variables système

La variable CURRENT_DATE contient la date courante (DATE, précis au jour près).


La variable CURRENT_TIMESTAMP contient la date courante (TIMESTAMP, précis à la
seconde près).
Fonction DECODE

La fonction DECODE n'existe pas dans postgreSQL. Il est nécessaire d'utiliser la


conditionnelle CASE (conforme au standard SQL):

ex:

Oracle: SELECT DECODE(numPresence, 0, 'Absent', 1, '1 séance',


numPresence || ' séances') FROM presenceModule;

PostgreSQL: SELECT CASE WHEN numPresence=0 THEN 'Absent' WHEN value=1


THEN '1 séance' ELSE numPresence || ' séances' END FROM
presenceModule;

Remplacement de la valeur nulle

NVL n'existe pas sous postgreSQL. L'équivalent postgreSQL est la fonction COALESCE
(conforme au standard SQL):

ex: SELECT COALESCE(note,0) FROM presenceModule;

La valeur NULL pour l’attribut note des n-uplets sélectionnés est remplacés par 0.

Jointure externe

La syntaxe '+=' pour les jointures externes, autorisée sous Oracle, n'est pas disponible sous
postgreSQL. Pour effectuer une jointure externe entre table, il est nécessaire d'utiliser la syntaxe
conforme au standard SQL (disponible aussi Oracle), LEFT OUTER JOIN et RIGHT OUTER
JOIN:

ex: SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.id;

Tous les n-uplets de table1 apparaitront dans l'ensemble des n-uplets résultats. Les n-uplets de
table1 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table2 auront
NULL comme valeur pour les attributs de table2.

SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id=table2.id;

Tous les n-uplets de table2 apparaitront dans l'ensemble des n-uplets résultats. Les n-uplets de
table2 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table1 auront
NULL comme valeur pour les attributs de table1.