Si vous demandez à un développeur quel Système de Gestion de Base de Données (SGBD) utiliser, il y a de fortes chances qu'il vous parle de deux SGBD majeurs. L'un est
Pour commencer, nous devons procéder à l'installation du paquet PostgreSQL. Pour ce faire, exécutez le code suivant, afin de vous assurer que les options sont correctement réglées :
# emerge -pv postgresql These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] dev-db/postgresql-8.0.4 -doc -kerberos +libg++ +nls +pam +perl -pg-hier -pg-intdatetime +python +readline (-selinux) +ssl -tcltk +xml2 +zlib 0 kB
Voici une liste de ce que les différentes options « build » signifient :
USE Flag | Signifie |
---|---|
Quand vous aurez terminé la personnalisation de PostgreSQL pour l'adapter à vos besoins spécifiques, passez à l'étape suivante en procédant à l'
# emerge postgresql(Sortie abrégée) >>> /usr/lib/libecpg.so.5 -> libecpg.so.5.0 >>> /usr/bin/postmaster -> postgres * Make sure the postgres user in /etc/passwd has an account setup with /bin/bash as the shell * * Execute the following command * emerge --config =postgresql-8.0.4 * to setup the initial database environment. * >>> Regenerating /etc/ld.so.cache... >>> dev-db/postgresql-8.0.4 merged.
Telle que la sortie de einfo l'indique, il reste quelques réglages post-installation à faire. Le chapitre suivant s'intéressera à la configuration de PostgreSQL proprement dite.
Telle que la dernière sortie d'
# passwd postgres New UNIX password: Retype new UNIX password: passwd: password updated successfully
Maintenant que c'est chose faite, la création de l'environnement initial de la base de donnée peut intervenir :
# emerge --config =postgresql-8.0.4 Configuring pkg... * Creating the data directory ... * Initializing the database ... The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale C. fixing permissions on existing directory /var/lib/postgresql/data ... ok creating directory /var/lib/postgresql/data/global ... ok creating directory /var/lib/postgresql/data/pg_xlog ... ok creating directory /var/lib/postgresql/data/pg_xlog/archive_status ... ok creating directory /var/lib/postgresql/data/pg_clog ... ok creating directory /var/lib/postgresql/data/pg_subtrans ... ok creating directory /var/lib/postgresql/data/base ... ok creating directory /var/lib/postgresql/data/base/1 ... ok creating directory /var/lib/postgresql/data/pg_tblspc ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 1000 creating configuration files ... ok creating template1 database in /var/lib/postgresql/data/base/1 ... 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 creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: /usr/bin/postmaster -D /var/lib/postgresql/data or /usr/bin/pg_ctl -D /var/lib/postgresql/data -l logfile start * * You can use /etc/init.d/postgresql script to run PostgreSQL instead of pg_ctl. *
L'environnement initial de la base de données est maintenant réglé. La section suivante concernera la vérification de l'installation et l'ajout d'accès à la base de données par des utilisateurs.
Maintenant que PostgreSQL est réglé il serait bon, à ce stade, de vérifier l'installation. Premièrement, assurez-vous que le service démarre correctement :
# /etc/init.d/postgresql start * Starting PostgreSQL ... [ ok ]
Après confirmation du démarrage, il serait également indiqué de l'ajouter au niveau d'exécution (run level) par défaut afin qu'il démarre à l'amorçage du système :
# rc-update add postgresql default * postgresql added to runlevel default
Maintenant que le service a été démarré, il est temps d'essayer de créer une base de données test. Pour commencer, créons une base de données test en utilisant la commande
$ createdb -U postgres -W test Password: CREATE DATABASE
La base de données a été créée avec succès, et nous sommes assurés que la base de données accomplit des tâches élémentaires. Poursuivons et supprimons (drop) cette base de données à l'aide de la commande
$ dropdb -U postgres -W test Password: DROP DATABASE
À ce stade, il n'y a que l'utilisateur postgres qui puisse exécuter des commandes. Ça n'est évidemment pas la configuration que nous voulons dans un environnement multi-utilisateurs. La section suivante concerne la gestion des comptes utilisateurs.
Comme nous l'avons déjà mentionné, il n'est pas souhaitable, dans un environnement multi-utilisateur, de devoir se connecter avec le compte « postgres ». Dans la plupart des cas, il y aura plusieurs utilisateurs et services qui accéderont au serveur, et chacun d'eux requiert des permissions différentes. Pour gérer cela, la commande
(remplacez chris par le nom d'utilisateur que vous souhaitez utiliser) $ createuser -a -d -P -E -U postgres -W chris Enter password for new user: Enter it again: Password: CREATE USER
Très bien, nous avons créé le super-utilisateur. L'option
(remplacez chris par l'utilisateur que vous venez de créer) $ createuser -A -D -P -E -U chris -W utilisateurTest Enter password for new user: Enter it again: Password: CREATE USER
Parfait ! Notre nouvel utilisateur a été créé par le super-utilisateur que nous avions préalablement créé. Les options
Avec notre base de données nouvellement créée, il y a un utilisateur qui peut créer des bases de données et ajouter de nouveaux utilisateur, ainsi que l'utilisateur principal postgres qui peut tout faire. Le dernier utilisateur que nous avons créé peut se connecter au serveur, et c'est à peu près tout. En général, les utilisateurs ont besoin de pouvoir insérer et extraire des données, et dans certains cas, de pouvoir exécuter un certain nombre d'autres tâches. Donc, pour que ce nouvel utilisateur puisse faire quoi que ce soit, il doit être configuré avec les permissions adéquates. Cela peut se faire facilement en passant le paramètre
$ createdb -O utilisateurTest -U chris -W MyDB Password: CREATE DATABASE
Très bien, nous avons maintenant une nouvelle base de données MyDB, ainsi qu'un utilisateur utilisateurTest qui peut y accéder. Pour s'en assurer, nous allons nous connecter à la nouvelle base de données MyDB en tant que utilisateurTest. Nous allons faire cela avec le programme
$ psql -U utilisateurTest -W MyDB 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 MyDB=>
utilisateurTest est maintenant connecté à la base de données, et peut commencer à exécuter quelques commandes. Pour s'accoutumer à l'utilisation de PostgreSQL, la section suivante présentera quelques commandes de base pour naviguer dans
Ceux qui sont habitués à MySQL devraient définitivement lire ceci. C'est là que PostgreSQL diffère sensiblement dans la manière d'exécuter les commandes. Pour commencer, voici une liste de quelques commandes qui seront abordées :
Commande | Usage | Équivalent MySQL |
---|---|---|
À l'exception de
MyDB=> CREATE TABLE produits ( MyDB(> identifiant_produit SERIAL, MyDB(> description TEXT, MyDB(> prix DECIMAL MyDB(> ); NOTICE: CREATE TABLE will create implicit sequence "products_product_id_seq" for serial column "products.product_id" CREATE TABLE
Vous pouvez ignorer cette « NOTICE », elle est parfaitement bénigne. La dernière ligne de la fonction
MyDB=> \d produits Table "public.produits" Column | Type | Modifiers -------------+---------+------------------------------------------------------------------ identifiant_produit | integer | not null default nextval('public.produits_identifiant_produit_seq'::text) description | text | prix | numeric |
La table a, en effet, été créée. Maintenant que la table est créée, nous pouvons y ajouter des données. La section suivante traite de l'ajout de données dans la base de données.
Cette section présentera deux façons d'ajouter des données dans la table nouvellement créée. Pour commencer, intéressons nous à la commande la plus élémentaire :
INSERT INTO [nom_table] (colonne1,colonne2,colonne3) VALUES(valeur1,valeur2,valeur3)
Le
MyDB=> INSERT INTO produits (description,prix) VALUES('Un produit test', 12.00); INSERT 17273 1
La dernière ligne appelle quelques explications. Le retour d'une commande d'insertion est composée d'un OID (Identifiant d'Objet) et du nombre d'éléments (ou lignes) insérés. Les OID dépassent un peu le cadre de ce guide et le
2,viande,6.79 3,soupe,0.69 4,limonade,1.79
Nous allons maintenant utiliser la commande
MyDB=> COPY produits FROM STDIN WITH DELIMITER AS ','; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 2,viande,6.79 >> 3,soupe,0.69 >> 4,limonade,1.79 >> \.
Malheureusement, cette instruction ne retourne pas les mêmes informations sur le statut que l'instruction
Cette section traitera de l'usage de l'instruction
SELECT (colonne1,colonne2|*) FROM (table) [WHERE (conditions)]
Il y a deux moyens pour sélectionner les colonnes. Le premier est d'utiliser
MyDB=> SELECT * FROM produits; identifiant_produit | description | prix ------------+----------------+------- 1 | Un produit test | 12.00 2 | viande | 6.79 3 | soupe | 0.69 4 | limonade | 1.79 (4 rows)
Comme on peut le voir, toutes les données que nous avons inséré plus tôt sont effectivement dans la table. Maintenant, admettons que nous ne souhaitons voir que la description et le prix, et que nous nous désintéressons de l'identifiant du produit. Dans ce cas, nous utiliserons la forme « colonnes particulières » de SELECT :
MyDB=> SELECT description,prix FROM produits; description | prix ----------------+------- Un produit test | 12.00 viande | 6.79 soupe | 0.69 limonade | 1.79 (4 rows)
Nous avons maintenant uniquement le produit et le prix, ce qui nous permet de nous concentrer sur les données importantes. Imaginons maintenant que nous ne souhaitons voir que les éléments dont le prix est supérieur à 2 euros. C'est ici que la clause
MyDB=> SELECT description,prix FROM produits WHERE prix > 2.00; description | prix ----------------+------- Un produit test | 12.00 viande | 6.79 (2 rows)
Une liste des produits dont le prix est supérieur à 2 euros est maintenant affichée, ce qui affine encore notre sélection. Ces formes de requêtes d'informations sont très puissantes et peuvent aider à créer des rapports extrêmement utiles.
Ceci conclut le guide PostgreSQL. Un grand merci à Masatomo Nakano, qui assure le suivit de Gentoo PostgreSQL, qui m'a été d'une grande aide. Toute suggestion concernant ce guide devra être envoyée à