Prés-requis :
Afin de (mieux) comprendre ce tutoriel, les connaissances suivantes sont importantes :
- GNU/Linux : Base
- Langage SQL : Intermédiaire
- Langage HTML/PHP : Base de la base
- Modélisation de donnée (Merise/UML) : Base
Qu’est-ce que PostgreSQL ?
PostgreSQL est un système de gestion de base de données relationnelle et objet (SGBDRO).
Un « moteur » SGBDR permet d’exécuter des bases de données afin de stocker les données de façon relationnelle.
Les bases de données sont utilisées tous les jours par des milliards d’utilisateurs. En effet, sans le savoir vous utilisez quotidiennement et par différents moyens des bases de données : votre banque, vos sites Web d’achat en ligne préférés, les sites de réseaux sociaux, ce site…
En réalité presque 100% des sites et application Web stocke en partie vos données dans des bases de données relationnelle.
Parmi les différentes solution de SGBDR, une est particulièrement interressant à mes yeux : PostgreSQL.
Open-source et gratuit c’est l’un des SGBDR les plus performants.
J’invite les anglophones, à lire la liste des fonctionnalités sur Wikipedia.
Qui utilise PostgreSQL ?
McAfee, Trend Micro, McAfee, Trend Micro, Skype, Météo France, leboncoin.fr utilisent PostgreSQL…
Pour info, Météo France gère une base de 3,5To :)
Allez voir les témoignages sur le site officiel !
Comment l’installer ?
Sur GNU/Linux c’est toujours aussi simple :
Distribution CentOS/Red-Hat/Fedora:
# yum install postgresql-server
Distribution Debian/Ubuntu :
# apt-get install postgresql
Vous pouvez même l’installer sur un serveur Windows !
Remarque : la distribution GNU/Linux utilisée durant ce tutoriel est : CentOS 6.3 x86_64.
Vous pouvez également installer les sources depuis le site officiel…
Je souhaite que le serveur postgresql se lance à chaque démarrage du serveur :
# chkconfig postgresql on
Je vérifie si la commande est bien passée :
# chkconfig postgresql --list
postgresql 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
Le contraire m’aurait étonné . Pour info, le « runlevel » par défaut sur CentOS est 3.
Pour vérifier votre « niveau d’exécution » :
# runlevel
N 3
Après l’installation, il est indispensable d’initialiser le moteur de SGBDR.
Sans cette initialisation, le serveur PostgreSQL ne peut tout simplement par démarrer !
Initialisation du SGBDR :
# service postgresql initdb
Initializing database: [ OK ]
PostgreSQL peut maintenant être démarrer :
# service postgresql start
Démarrage du service postgresql : [ OK ]
On s’assure que le service est bien lancé :
# ps aux | grep postgres
postgres 1956 2.6 0.3 216292 6440 ? S 22:40 0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 1958 0.0 0.0 179304 1440 ? Ss 22:40 0:00 postgres: logger process
postgres 1960 0.3 0.0 216292 1700 ? Ss 22:40 0:00 postgres: writer process
postgres 1961 0.2 0.0 216292 1612 ? Ss 22:40 0:00 postgres: wal writer process
postgres 1962 0.0 0.1 216436 2032 ? Ss 22:40 0:00 postgres: autovacuum launcher process
postgres 1963 0.0 0.0 179436 1708 ? Ss 22:40 0:00 postgres: stats collector process
root 1971 0.0 0.0 105308 936 pts/0 S+ 22:40 0:00 grep postgres
Le moteur est à présent démarrer, nous pouvons commencer à travailler…
Nous allons créer une base de donnée qui sera le « backend » d’une application de commerce en ligne : appelée « Shop » !
Cette base sera pour des raisons évidentes simplifiée.
La première étape est sans conteste la plus importante : l’étude du modèle de donnée.
Pour ce faire, il faut un papier et un crayon afin de définir le modèle de donnée. Je ne m’étend pas volontairement sur le MDD, l’idée du tutoriel est vraiment axé sur PostgreSQL et considère que vous avez déjà quelques base en modélisation de données et SQL.
Je rappelle, que notre Appli se doit d’être relationnelle (dans le sens où les éléments auront des relations entre eux).
Ici vos meilleurs outils sont : le crayon, la feuille blanche et surtout la gomme
Application « simplifiée » de commerce en ligne.
Mais au faite, que va faire notre Appli ?
C’est simple, permettre à des internautes (table « client ») de commander des produits (table « produit »).
Un internaute pourra donc commander un ou plusieurs produits et spécifier leurs quantités (grâce à la table « cmd_prod »).
Pour finir, le client aura bien sur une commande (table « commande ») avec un montant, une date…
Autour de PostgreSQL :
Lors de l’installation de PostgreSQL, un utilisateur UNIX (administrateur du moteur SQL) fut créé : postgres
# cat /etc/passwd | grep postgres
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
Répertoire des bases de données : /var/lib/pgsql/data/base/
Tous les fichiers de configuration se trouvent dans le répertoire : « /var/lib/pgsql/data ».
Créer un lien symbolique si vous avez l’habitude de travailler dans le répertoire « /etc » :
# ln -s /var/lib/pgsql/data/ /etc/postgresql
# ls /etc/postgresql/
base pg_clog pg_ident.conf pg_multixact pg_subtrans pg_twophase pg_xlog postmaster.opts
global pg_hba.conf pg_log pg_stat_tmp pg_tblspc PG_VERSION postgresql.conf postmaster.pid
La configuration de base de postgreSQL est correcte pour la plupart des usages.
Cependant si votre serveur web est sur un autre serveur, vous serez obliger d’autoriser les connexions tout à la fin du fichier « pg_hba.conf » !
Plus d’info : http://docs.postgresql.fr/8.4/client-authentication.html
Pour se connecter avec l’utilisateur administrateur de PostgreSQL, rien de plus simple :
# su - postgres
$ whoami
postgres
Pour info : Postgres est un utilisateur Unix mais il y à aussi un utilisateur postgreSQL postgres.
La première étape est donc de modifier le mot de passe de l’utilisateur SQL postgres.
Pour ce faire, il faut se connecter au moteur via la commande « psql » :
$ psql
psql (8.4.13)
Saisissez « help » pour l'aide.
postgres=#
Le prompt nous indique ici que nous somme connecter sur la base « postgres » créée à l’installation NDLD !
Commençons par lister les bases de données existantes :
postgres=# \\l
Liste des bases de données
Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d'accès
-----------+--------------+----------+-------------+--------------+-----------------------
postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
(3 lignes)
Modifier le mot de passe de l’utilisateur SQL postgres :
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'mysecretpassword' ;
ALTER ROLE
Pour le bien de l’article, nous allons créer une base de données ainsi qu’un utilisateur (geek) propre à l’application (shop).
D’une manière générale, c’est une bonne pratique. En effet, en cas de compromission de « geek », seule l’appli « shop » sera vulnérable…
Création de l’utilisateur « geek » avec comme mot de passe « mysecretpassword » :
postgres=# CREATE USER geek WITH ENCRYPTED PASSWORD 'mysecretpassword' ;
CREATE ROLE
Lister les utilisateurs SQL :
postgres=# SELECT rolname FROM pg_roles;
rolname
----------
postgres
geek
(2 lignes)
Création de notre base de donnée :
À présent, on peut créer la base de donnée. Plusieurs méthodes sont possibles pour créer un base, celle-ci est néanmoins la plus universelle :
postgres=# CREATE DATABASE shop ;
CREATE DATABASE
Modifier le propriétaire de la base « shop » :
postgres=# ALTER DATABASE shop OWNER TO geek ;
ALTER DATABASE
Lister de nouveau les bases :
postgres=# \\l
Liste des bases de données
Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d'accès
-----------+--------------+----------+-------------+--------------+-----------------------
postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
shop | geek | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
(4 lignes)
Se connecter en tant que « geek » :
-bash-4.1$ psql -U geek
psql: FATAL: authentification Ident échouée pour l'utilisateur « geek »
C’est normal, nous n’avons pas autorisé cette connexion dans le fichier « pg_hba.conf » :
# vim pg_hba.conf
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Afin de prendre en compte cette modification il est nécessaire de relancer le moteur Postgres (ou tout du moins de recharger la conf) :
# service postgresql restart
Arrêt du service postgresql: [ OK ]
Démarrage du service postgresql : [ OK ]
On retente une connexion :
# su - postgres
$ psql -U geek shop
Mot de passe pour l'utilisateur geek :
psql (8.4.13)
Saisissez « help » pour l'aide.
shop=>
Nous allons pouvoir créer nos tables et insérer nos données :
N.B. Dans une vraie application, l’insertion des données ainsi que l’affichage se fera bien sur via une interface Web…(ou pas forcément web )
Création des tables :
Création de la table « marque » :
shop=> CREATE TABLE marque (
id_marq integer PRIMARY KEY,
nom text,
description text,
pays text
);
NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « marque_pkey » pour la table « marque »
CREATE TABLE
Remarque : la contrainte « PRIMARY KEY » signifie que « id_marq » ne peut pas être Null et doit être Unique.
On visualise cette table :
shop=> \\d
Liste des relations
Schéma | Nom | Type | Propriétaire
--------+--------+-------+--------------
public | marque | table | geek
(1 ligne)
Tout est bon
Pour les raisons de ce tutoriel, nous allons insérer tout de suite des données dans cette table.
Insertion des marques :
shop=> INSERT INTO marque VALUES (1, 'APPLE', 'Multinationale américaine qui conçoit et vend des produits électroniques grand public, des ordinateurs personnels et des logiciels informatiques', 'USA');
INSERT 0 1
shop=> INSERT INTO marque VALUES (2, 'MICROSOFT', 'Multinationale informatique américaine, fondée par Bill Gates et Paul Allen. Son activité principale consiste à développer et vendre des systèmes d’exploitation et des logiciels. Son revenu annuel a atteint 60,42 milliards de dollars sur l’exercice 2007-20081 et elle emploie 88 180 personnes dans 107 pays différents.', 'USA');
INSERT 0 1
shop=> INSERT INTO marque VALUES (3, 'ASUS', 'Société basée à Taïwan qui produit des cartes mères, des cartes graphiques, des lecteurs optiques, des PDA, des ordinateurs portables, des périphériques réseau, des téléphones portables, des boîtiers et des systèmes de refroidissement d’ordinateurs.', 'TAIWAN');
INSERT 0 1
shop=> INSERT INTO marque VALUES (4, 'ARCHOS', 'société française qui conçoit et vend des produits électroniques, notamment des baladeurs numériques ainsi que des tablettes multimédias fonctionnant sous Android et Windows. Créé en 1988, le nom de cette société est un anagramme. Henri Crohas, actuel PDG et créateur de la marque.', 'FRANCE');
INSERT 0 1
Afficher toutes les marques :
shop=> SELECT * FROM marque ;
id_marque | nom | description | pays
1 | APPLE | Multinationale américaine qui conçoit et vend des produits électroniques grand public, des ordinateurs personnels et des logiciels informatiques | USA
2 | MICROSOFT | Multinationale informatique américaine, fondée par Bill Gates et Paul Allen. Son activité principale consiste à développer et vendre des systèmes d’exploitation et des logiciels. Son revenu annuel a atteint 60,42 milliards de dollars sur l’exercice 2007-20081 et elle emploie 88 180 personnes dans 107 pays différents. | USA
3 | ASUS | Société basée à Taïwan qui produit des cartes mères, des cartes graphiques, des lecteurs optiques, des PDA, des ordinateurs portables, des périphériques réseau, des téléphones portables, des boîtiers et des systèmes de refroidissement d’ordinateurs. | TAIWAN
4 | ARCHOS | société française qui conçoit et vend des produits électroniques, notamment des baladeurs numériques ainsi que des tablettes multimédias fonctionnant sous Android et Windows. Créé en 1988, le nom de cette société est un anagramme. Henri Crohas, actuel PDG et créateur de la marque. | FRANCE
(4 lignes)
Création de la table client :
shop=> CREATE TABLE client (
id_cli integer PRIMARY KEY,
nom text,
prenom text,
adresse text,
CP integer,
ville text,
email text,
sexe text,
ip inet,
date_inscription date
);
NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « client_pkey » pour la table « client »
CREATE TABLE
Insertion des clients :
shop=> INSERT INTO client VALUES (1, 'DELTAGEEK', 'Zeus','20 rue de la pointe', 75000, 'PARIS','zeus@deltageek.fr','M','127.0.0.1','27/10/12');
INSERT 0 1
shop=> INSERT INTO client VALUES (2, 'HASH', 'Roberta','34 allée de bavière', 67000,'STRASBOURG','roberta.hash@domain.tld','F','192.168.1.24','25/12/11');
INSERT 0 1
Affichage des clients :
shop=> SELECT * FROM client ;
id_client | nom | prenom | adresse | cp | ville | email | sexe | ip | date_inscription
-----------+-----------+---------+---------------------+-------+------------+-------------------------+------+--------------+------------------
1 | DELTAGEEK | Zeus | 20 rue de la pointe | 75000 | PARIS | zeus@deltageek.fr | M | 127.0.0.1 | 2012-10-27
2 | HASH | Roberta | 34 allée de bavière | 67000 | STRASBOURG | roberta.hash@domain.tld | F | 192.168.1.24 | 2011-12-25
(2 lignes)
Création de la table « produit » :
shop=> CREATE TABLE produit (
id_prod integer PRIMARY KEY,
nom text,
description text,
prix numeric,
marque integer REFERENCES marque (id_marq)
);
NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « produit_pkey » pour la table « produit »
CREATE TABLE
Insertion des produits :
shop=> INSERT INTO produit VALUES (1, 'iPhone 5', 'Le tout dernier téléphone de la marque à la pomme !', 679, 1);
INSERT 0 1
shop=> INSERT INTO produit VALUES (2, 'iPad 3', 'Lorsque vous tenez le nouvel iPad entre vos mains, tout se fait naturellement...', 489, 1);
INSERT 0 1
shop=> INSERT INTO produit VALUES (3, 'Windows 8', 'Nouvel OS de Micro$oft.', 159, 2);
INSERT 0 1
shop=> INSERT INTO produit VALUES (4, 'A6JC', 'Pc portable', 759, 3);
INSERT 0 1
shop=> INSERT INTO produit VALUES (5, 'ARCHOS 101 XS', 'Coverboard ultrafin pour protéger, maintenir et écrire sur votre tablette', 379, 4);
INSERT 0 1
Afficher tous les produits :
shop=> SELECT * FROM produit ;
id_prod | nom | description | prix | marque
---------+---------------+----------------------------------------------------------------------------------+------+--------
1 | iPhone 5 | Le tout dernier téléphone de la marque à la pomme ! | 679 | 1
2 | iPad 3 | Lorsque vous tenez le nouvel iPad entre vos mains, tout se fait naturellement... | 489 | 1
3 | Windows 8 | Nouvel OS de Micro$oft. | 159 | 2
4 | A6JC | Pc portable | 759 | 3
5 | ARCHOS 101 XS | Coverboard ultrafin pour protéger, maintenir et écrire sur votre tablette | 379 | 4
(5 lignes)
Création de la table « cmd_prod » :
shop=> CREATE TABLE cmd_prod (
id_cmd integer REFERENCES commande,
id_prod integer REFERENCES produit,
quantite integer CHECK (quantite > 0),
PRIMARY KEY (id_prod, id_cmd)
);
NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « cmd_prod_pkey » pour la table « cmd_prod »
CREATE TABLE
Création de la table commande :
shop=> CREATE TABLE commande (
id_cmd integer PRIMARY KEY,
client integer REFERENCES client (id_cli),
date_cmd date,
montant integer
);
NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « commande_pkey » pour la table « commande »
CREATE TABLE
Insertion des produits :
shop=> INSERT INTO cmd_prod VALUES (1,1,1); -- 1 iPhone pour la commande n°1
INSERT INTO cmd_prod VALUES (2,1,1);
INSERT INTO cmd_prod VALUES (2,4,1);
INSERT 0 1
shop=> INSERT INTO cmd_prod VALUES (1,2,2); -- 3 iPad pour la commande n°1
INSERT 0 1
shop=> INSERT INTO cmd_prod VALUES (1,3,1);
INSERT 0 1
shop=> INSERT INTO cmd_prod VALUES (2,1,1);
INSERT 0 1
shop=> INSERT INTO cmd_prod VALUES (2,4,1);
INSERT 0 1
shop=> INSERT INTO cmd_prod VALUES (3,5,1);
INSERT 0 1
Afficher la table « cmd_prod » est encore abstrait :
shop=> SELECT * from cmd_prod ;
id_cmd | id_prod | quantite
--------+---------+----------
1 | 1 | 1
1 | 2 | 2
1 | 3 | 1
2 | 1 | 1
2 | 4 | 1
3 | 5 | 1
(6 lignes)
Insertion des données dans la tables commande :
Remarque ici nous calculons le total à la main… Dans la vraie vien l’Appli se chargera de cela !
shop=> INSERT INTO commande VALUES (1,1,'10/10/12',1816);
INSERT 0 1
shop=> INSERT INTO commande VALUES (2,2,'03/09/12',1438);
INSERT 0 1
shop=> INSERT INTO commande VALUES (3,1,'25/11/12',379);
INSERT 0 1
Afficher les commandes :
id_cmd | client | date_cmd | montant
--------+--------+------------+---------
1 | 1 | 2012-10-10 | 1816
2 | 2 | 2012-09-03 | 1438
3 | 1 | 2012-11-25 | 379
(3 lignes)
Cette table nous apprend que l’utilisateur avec l’id 2 a commandé le 2012-09-03 pour 1438€ de produit (produit 1 et 4) !
Requêtes avec jointure :
Afficher les produits et leur marque :
shop=> SELECT marque.nom AS "Marque", produit.nom AS "Produit" FROM produit, marque WHERE produit.marque=marque.id_marq;
Marque | Produit
-----------+---------------
APPLE | iPhone 5
APPLE | iPad 3
MICROSOFT | Windows 8
ASUS | A6JC
ARCHOS | ARCHOS 101 XS
(5 lignes)
Afficher toutes les commandes :
shop=> SELECT commande.id_cmd AS "N° de la commande", client.nom, client.prenom, montant AS "Total commande" FROM commande,client WHERE commande.client = client.id_cli ;
N° de la commande | nom | prenom | Total commande
-------------------+-----------+---------+----------------
1 | DELTAGEEK | Zeus | 1816
2 | HASH | Roberta | 1438
3 | DELTAGEEK | Zeus | 379
(3 lignes)
Afficher les commandes de plus de 1500 € :
shop=> SELECT commande.id_cmd AS "N° de la commande", client.nom, client.prenom, montant AS "Total commande" FROM commande,client WHERE commande.client = client.id_cli AND montant > 1500 ;
N° de la commande | nom | prenom | Total commande
-------------------+-----------+--------+----------------
1 | DELTAGEEK | Zeus | 1816
(1 ligne)
Afficher les produits commandés par chaque client :
shop=> SELECT produit.nom AS "Produit", commande.id_cmd AS "N° de la commande", client.nom, client.prenom, cmd_prod.quantite, produit.prix AS "Prix unitaire", montant AS "Total commande" FROM produit,commande,client,cmd_prod WHERE commande.id_cmd = cmd_prod.id_cmd AND commande.client = client.id_cli AND produit.id_prod = cmd_prod.id_prod;
Produit | N° de la commande | nom | prenom | quantite | Prix unitaire | Total commande
---------------+-------------------+-----------+---------+----------+---------------+----------------
iPhone 5 | 1 | DELTAGEEK | Zeus | 1 | 679 | 1816
iPad 3 | 1 | DELTAGEEK | Zeus | 2 | 489 | 1816
Windows 8 | 1 | DELTAGEEK | Zeus | 1 | 159 | 1816
iPhone 5 | 2 | HASH | Roberta | 1 | 679 | 1438
A6JC | 2 | HASH | Roberta | 1 | 759 | 1438
ARCHOS 101 XS | 3 | DELTAGEEK | Zeus | 1 | 379 | 379
(6 lignes)
Conclusion sur l’application « Shop » :
Ce tutoriel permet de vous familiariser avec PostgreSQL. La base de données « Shop » permet au final de créer des clients, des produits et permettre aux clients de passer commande d’un ou plusieurs produits…
Bien sur, dans le cadre d’une « vraie » application, un « front » web serait mise en place pour permet à n’importe qui d’insérer des données dans les tables, de faire des requêtes SQL…
Extraction de donnée :
Extraire des données en CSV (il faut être super-utilisateur : postgres) :
Rappel, MS EXCEL utilise le délimiteur ‘;’ :
# psql -U postgres -d shop -c "COPY (select * from "client") to '/tmp/client.csv' delimiter ';' CSV HEADER"
Mot de passe pour l'utilisateur postgres :
COPY 2
# more /tmp/client.csv
id_cli;nom;prenom;adresse;cp;ville;email;sexe;ip;date_inscription
1;DELTAGEEK;Zeus;20 rue de la pointe;75000;PARIS;zeus@deltageek.fr;M;127.0.0.1;2012-10-27
2;HASH;Roberta;34 allée de bavière;67000;STRASBOURG;roberta.hash@domain.tld;F;192.168.1.24;2011-12-25
La sauvegarde/restauration :
PostgreSQL est fournit avec une outil de sauvegarde bien pratique : pg_dumpall
Son utilisation est extrêmement simple.
Sauvegarde :
# su - postgres
-bash-4.1$ pg_dump shop > shop.sql
Sauvegarder et archiver :
-bash-4.1$ pg_dump -Ft -b shop > shop.tar
Restauration :
-bash-4.1$ psql -d shop -f shop.sql
ou
-bash-4.1$ pg_restore -d nouvellebase shop.tar
Administration via PgAdmin :
PgAdmin est un logiciel client d’administration de PostgreSQL. Compatible FreeBSD, Linux, Mac OSX et Microsoft Windows, il s’installe très facilement et permet d’administrer vos bases via le réseau.
Pour ce faire, il faut bien sur autoriser la connexion dans votre fichier pg_hba.conf.
# vim pg_hba.conf
# Autorisation réseau Dev
host shop geek 192.168.1.0/24 md5
Ici on autorise le réseau « 192.168.1.0″ à se connecter sur la base « shop » avec le nom d’utilisateur « geek ». Un mot de passe (de type md5) sera toutefois demandé.
Ajout d’un serveur
Module de requête SQL intégrée
Comme toujoours, vous trouverez plus d’informations sur le site web officiel.
Administration en mode Web : phpPgAdmin
Installer phpPgAdmin
Ce package est présent dans le dépôt EPEL
# yum install phpPgAdmin -y
Modifier le vhost :
# vim /etc/httpd/conf.d/phpPgAdmin.conf
Alias /phpPgAdmin /usr/share/phpPgAdmin
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
Allow from IpStationDev
# Allow from .example.com
Configurer phpPgAdmin via le fichier :
# vim /etc/phpPgAdmin/config.inc.php
// Si vous souhaitez autoriser la connexion avec postgres :
$conf['extra_login_security'] = false;
Relancer Apache.
http://myserver/phpPgAdmin/
Aperçu de l’interface full web de phpPgAdmin :
Cette interface permet d’effectuer les fonctionnalités courantes…
BONUS :
Visualisation du contenu dans une page PHP.
Alors je ne suis pas un spécialiste PHP mais voici un bout de code qui permet d’afficher la table « client » dans une page Web.
Liste des clients de l’Appli Shop
Télécharger le fichier : client.txt
PS : pensez à renommer le fichier en .php si vous souhaitez l’utiliser sur votre maquette
J’espère que cet article vous à fait découvrir (un peut plus) PostgreSQL…
Have a lot of Fun
Original post of Zeus DeltaGeekBlog.Votez pour ce billet sur Planet Libre.