PostgreSQL

PostgreSQL est un système de gestion de base de données. C'est un outil libre disponible sous license BSD.
Il fonctionne sur un grand nombre d'OS dont Linux/BSD/Windows/Solaris et est utilisable par pleins de langages dont:
C/C++
Python
Perl
Php
java
.NET

Installation

Avant de pouvoir commencer a gérer sa base de données, il va avant tout falloir installer postgreSQL, pour cela:
Debian:

apt-get install postgresql 

Centos:

yum install postgresql94-server

FreeBSD:

#On se rend dans le port de postgresql
cd /usr/ports/databases/postgresql94-server
#On choisit les modules que l'on souhaite installer
make config-recursive
#On installe
make install clean
#Via pkg
pkg install postgresql
#On oublie pas d'ajouter postgresql au fichier rc.conf
echo 'postgresql_enable="YES"' >>/etc/rc.conf

L'utilisateur root n'a pas le droit de toucher a la bdd pour des raisons de sécurité,si vous essayez, ce message devrait apparaitre:
“root” execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user ID to prevent possible system security compromise. See the documentation for more information on how to properly start the server.
donc normalement l'utilisateur pgsql a été crée lors de l’installation, si ce n'est pas le cas, il faut le faire. Une fois postgreSQL installé et notre utilisateur présent, le SGBD a encore besoin d'être initialisé pour pouvoir être utilisé, pour cela on va utiliser la commande initdb:

initdb
initdb: no data directory specified
You must identify the directory where the data for this database system
will reside.  Do this with either the invocation option -D or the
environment variable PGDATA.

Si vous avez un message d'erreur dit que la variable PGDATA n'existe pas, il suffis juste de la définir via:

set PGDATA = ( /usr/local/pgsql/data )

ou:

initdb -D /usr/local/pgsql/data

PGDATA va permettre de dire a Postgres où aller chercher les données.

La base de données est maintenant créee et initialisée, il reste cependant quelques paramétrages a faire, notamment au niveau des droits d'accès et de la sécurité parce que bon, une base de données en libre accès sans mot de passe ou quoi ça craint un peu.
On va commencer par modifier le fichier /usr/local/pgsql/data/pg_hba.conf on va régler ici les droits d'accès au serveur.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.0/24         trust
host    all             all             192.168.1.42/24        password
host    all             all             192.168.1.43/24         md5

Ici on autorise tout le monde dans le réseau 192.168.0.0/24 sans mot de passe
l'hôte 192.168.1.42 utilisera un mot de passe non chiffrée, pour une connexion sure, a l’intérieur d'un LAN par exemple
et 192.168.1.43 utilisera un mot de passe chiffré en md5, pour une connexion non sécurisée. et bien évidemment, le serveur lui même.
On va aussi activer les connexions distantes, pour cela il faut modifier le fichier /usr/local/pgsql/data/postgresql.conf et modifier la valeur de listen_address:

listen_address = '*'

Si le format de date ne convient pas, il suffis de modifier dans le même fichier, la ligne datestyle

datestyle Input Ordering Example Output
SQL, DMY day/month/year 17/12/1997 15:37:16.00 CET
SQL, DMY month/day/year 12/17/1997 07:37:16.00 PST
Postgres, DMY day/month/year Wed 17 Dec 07:37:16 1997 PST

Voilà la base de données est maintenant prête a être utilisée.

Administration

Maintenant, postgreSQL est configuré et est prêt a être utilisée, mais pour le moment c'est vide, on va donc créer une base:

/usr/local/bin/createdb toto

On va créer un utilisateur par la même occasion

/usr/local/bin/createuser toto
CREATE USER

cependant notre nouvel utilisateur n'a pas de mot de passe, on va donc lui en ajouter un,ainsi que les droits de création de base de données et d'utilisateurs pour cela, on va se connecter a notre nouvelle base de données avec l'utilisateur principal:

$psql -U pgsql -d toto
psql (9.3.9)
Type "help" for help.
 
toto=#ALTER USER toto WITH PASSWORD 'totopasswd';
toto=#ALTER USER toto CREATEUSER CREATEDB;

Voici d'autres commandes d'administrations pour créer/supprimer des utilisateurs et de même pour les databases:

toto=#CREATE USER tutu WITH PASSWORD 'tutupasswd';
toto=#DROP USER tutu;
toto=#CREATE DATABASE tutudb;
toto=#DROP DATABASE tutudb;

Voici une liste des principaux types de données utilisées dans postgreSQL:

Name Aliase Description
boolean bool logical Boolean (true/false)
character [ (n) ] char [ (n) ] fixed-length character string
text variable-length character string
character varying [ (n) ] varchar [ (n) ] variable-length character string
double precision float8 double precision floating-point number (8 bytes)
real float4 single precision floating-point number (4 bytes)
integer int, int4 signed four-byte integer
numeric [ (p, s) ] decimal [ (p, s) ] exact numeric of selectable precision
smallint int2 signed two-byte integer
smallserial serial2 autoincrementing two-byte integer
serial serial4 autoincrementing four-byte integer
date calendar date (year, month, day)
time [ (p) ] [ without time zone ] time of day (no time zone)
time [ (p) ] with time zone timetz time of day, including time zone
timestamp [ (p) ] [ without time zone ] date and time (no time zone)
timestamp [ (p) ] with time zone timestamptz date and time, including time zone
json JSON data
money currency amount
inet IPv4 or IPv6 host address

La liste complète est disponible a cette adresse

Utilisation

La gestions des données reste principalement la même que avec les autres SGBD:
Le datatype “serial” permet de définir un type qui s'auto-incrémente

toto=# CREATE TABLE totofamily (
    id serial PRIMARY KEY NOT NULL,
    name VARCHAR(100)NOT NULL,
    lastname VARCHAR(100) NOT NULL,
    age INTEGER NOT NULL,
    member VARCHAR(100) NOT NULL);
CREATE TABLE
 
 
toto=# INSERT INTO totofamily (name,lastname,age,member) VALUES ('toto','toto',20,'son');
INSERT 0 1
toto=# INSERT INTO totofamily (name,lastname,age,member) VALUES ('toto','tutu',20,'mother');
INSERT 0 1
toto=# INSERT INTO totofamily (name,lastname,age,member) VALUES ('toto','titi',20,'father');
INSERT 0 1
toto=# SELECT * FROM totofamily;
 id | name | lastname | age | member
----+------+----------+-----+--------
  1 | toto | toto     |  20 | son
  2 | toto | tutu     |  20 | mother
  3 | toto | titi     |  20 | father
(3 ROWS)
toto=# DELETE FROM totofamily WHERE id=3;
DELETE 1

Même si quelques commandes sont tout de même spécifiques a postgreSQL:

COPY (SELECT * FROM totofamily) TO '/home/toto/mafamille.csv' WITH CSV HEADER

qui permet de copier toute la table totofamilly et de l'exporter sous format csv avec le nom des champs en header.

Sauvegarde et restauration

ou encore pour dumper toute la base de données

pg_dump toto > /home/bckbdd/toto.sql

Dumper seulement la table totofamily de la base toto:

pg_dump toto -t totofamily > /home/bckbdd/totofamily.sql

Si la taille de la base de données est imposante:

pg_dump toto | bzip2 -c > /home/bckbdd/toto.sql.bz2

et pour restaurer la base:

psql toto < toto.sql
bunzip2 toto.sql.bz2 | psql toto
wiki/postgresql.txt · Dernière modification: 2018/10/08 15:42 par root
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5