From af63303a48f55ceb65161c235ca4a1dc41762444 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Wed, 21 Jun 2017 11:50:39 +0200 Subject: [PATCH] mise en forme PG (suite) --- reveal/postgresql.html | 224 ++++++++++++++++++++++++----------------- 1 file changed, 134 insertions(+), 90 deletions(-) diff --git a/reveal/postgresql.html b/reveal/postgresql.html index d494ed4..68ab747 100644 --- a/reveal/postgresql.html +++ b/reveal/postgresql.html @@ -47,112 +47,144 @@
-

PostgreSQL est une base de données qui met l'accent sur le respect du standard SQL et la sécurité des données. -Il se base notamment sur des journaux de transaction (WAL), fichiers binaires qui contient toutes les données -avant écriture sur les disques.

-

-# apt install postgresql
-# vim sources.list
-deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main
-
+

PostgreSQL

+
+

Installation

-

Instances :

-# pg_ctlcluster < version > < cluster > start|stop|restart|reload|status|promote -# pg_lsclusters - +# vim sources.list +deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main +
+
# apt install postgresql
+
+ +
+

Instances

+
+
+# pg_ctlcluster <version> <cluster> start|stop|restart|reload|status|promote
+# pg_lsclusters
+
 Ver Cluster Port Status Owner    Data directory               Log file
 9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
 
-# dpkg-reconfigure locales
-$ /usr/bin/pg_createcluster < version > < cluster >
 
-

-Attention à la locales -

    -
  • configuration :
    `/etc/postgresql/< version >/< instance >/`
  • -
  • journaux :
    `/var/log/postgresql/postgresql-< version >-< instance >.log`
  • -
  • stockage :
    `/var/lib/postgresql/< version >/< instance >/`
  • -
  • binaires et bibliothèques :
    `/usr/lib/postgresql/< version >/< instance >/`
  • -
  • etc…
  • -

    +

    Attention à la locale

    +
    +
    +# dpkg-reconfigure locales
    +$ /usr/bin/pg_createcluster <version> <cluster>
    +
    +
    +
+ +
+

Fichiers

+
+configuration : /etc/postgresql/<version>/<instance>/
+
+journaux : /var/log/postgresql/postgresql-<version>-<instance>.log
+
+stockage : var/lib/postgresql/<version>/<instance>/
+
+binaires et bibliothèques : /usr/lib/postgresql/<version>/<instance>/
+
-# sudo -u postgres psql
+# sudo -u postgres psql
+

Contenu de pg_hba.conf :

-~~~{.diff} -- local all all peer -+ local all all password -~~~ -$ createuser -P < login > -$ createdb -O < login > < base > +

+- local   all  all  peer
++ local   all  all  password
+
+
+$ createuser -P <login>
+$ createdb -O <login> <base>
+
 
-$ dropdb < base >
-$ psql -c "ALTER USER < login > WITH PASSWORD 'foo'"
-$ dropuser < login >
+
+$ dropdb <base>
+$ psql -c "ALTER USER <login> WITH PASSWORD 'foo'"
+$ dropuser <login>
+
 =# SELECT * FROM pg_user;
 =# \du
+
+
-$ psql -l -= # \d -= # SELECT * FROM pg_database; +
+
+$  psql -l
+
+=# \d
+=# SELECT * FROM pg_database;
+
 
-SELECT pid, datname, usename, client_addr, query_start, waiting, query FROM pg_stat_activity WHERE state='active' ORDER by query_start;
+
+SELECT pid, datname, usename, client_addr, query_start, waiting, query
+  FROM pg_stat_activity
+  WHERE state='active'
+  ORDER by query_start;
 
+

Outils complémentaires

-# aptitude install ptop pgbadger pgadmin3
-$ pg_top
-
-

Faire un VACUUM FULL sur toutes les bases de données :

-$ vacuumdb -a -f -v - -

ANALYSE sur toutes les tables d'une base de données :

-$ psql mydb -=# ANALYZE; - +# aptitude install ptop pgbadger pgadmin3 +$ pg_top +
+

Faire un VACUUM FULL sur toutes les bases de données

+
$ vacuumdb -a -f -v
+
+

ANALYSE sur toutes les tables d'une base de données

+
$ psql mydb
+=# ANALYZE;
+
-
 

Optimisation

  • shared_buffers : quantité de mémoire dédiée à PostgreSQL
  • work_mem : quantité de mémoire par process
  • max_connections
  • -
-
 

Sauvegarde

-$ pg_dump < base > >dump.sql -$ pg_dumpall >dump.sql -$ psql < base > < dump.sql +
+$ pg_dump <base> >dump.sql
+$ pg_dumpall > dump.sql
+$ psql <base> < dump.sql
+
-

Archivage de WAL :

-wal_level = 'archive' +

Archivage de WAL :

+
wal_level = 'archive'
 archive_command = 'rsync %p backup.example.net:/backup/…/archives/%f'
 
-
+ barman
+

barman

-
 

Usage

-=> CREATE TABLE weather ( +

+CREATE TABLE weather (
     city            varchar(80),
     temp_lo         int,           -- low temperature
     temp_hi         int,           -- high temperature
@@ -160,61 +192,73 @@ archive_command = 'rsync %p backup.example.net:/backup/…/archives/%f'
     date            date
 );
 
-=> INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
-
+INSERT INTO weather VALUES ('San Francisco', 46,50,0.25, '1994-11-27'); +
-=> SELECT * FROM weather;
-=> SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
-=> SELECT * FROM weatherWHERE city = 'San Francisco' AND prcp > 0.0;
-=> SELECT DISTINCT city FROM weather ORDER BY city;
-=> SELECT * FROM weather, cities WHERE city = name;
-=> SELECT weather.city, weather.temp_lo, cities.location FROM weather, cities WHERE cities.name = weather.city;
-=> SELECT * FROM weather INNER JOIN cities ON (weather.city = cities.name);
-=> SELECT * FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);
-=> SELECT * FROM weather w, cities c WHERE w.city = c.name;
-
+ +SELECT * FROM weather; + +SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather; + +SELECT * FROM weatherWHERE city = 'San Francisco' AND prcp > 0.0; + +SELECT DISTINCT city FROM weather ORDER BY city; + +SELECT * FROM weather, cities WHERE city = name; + +SELECT weather.city, weather.temp_lo, cities.location + FROM weather, cities WHERE cities.name = weather.city; + +SELECT * FROM weather + INNER JOIN cities ON (weather.city = cities.name); + +SELECT * FROM weather + LEFT OUTER JOIN cities ON (weather.city = cities.name); + +SELECT * FROM weather w, cities c WHERE w.city = c.name; +
-
-

Pooler de connexions :

+

Pool de connexions :

  • pgpool
  • pgbouncer
+
-

Streaming Replication

+
+

Streaming Replication

master / slave
-
 

Slony : réplication des données par trigger

-

Ne réplique pas le schéma : toutes les bases à créer

    -
  • Avoir une clé primaire sur chaque table à répliquer
    -(peut être contourné dans certaines conditions,
    -mais fortement déconseillé par les dév. de Slony)
  • -
  • Ne pas utiliser la commande SQL "TRUNCATE" (avant PG 8.4)
  • -SELECT * from pg_stat_replication; -
+
  • Ne réplique pas le schéma : toutes les bases à créer
  • +
  • Avoir une clé primaire sur chaque table à répliquer *
  • +
  • Ne pas utiliser "TRUNCATE" (PG < 8.4)
  • +
    SELECT * from pg_stat_replication;
    +* : peut être contourné mais fortement conseillé.
    +

    Initialise le cluster Slony

    +
    slonik_init_cluster | slonik
    +

    Initialise le set de réplication

    +Ensemble de tables à répliquer, y compris les triggers. +
    slonik_create_set set1 | slonik
    -

    Initialise le cluster Slony

    -slonik_init_cluster | slonik - -

    Initialise le set de réplication (ensemble de tables à répliquer), notamment installation des triggers.

    -slonik_create_set set1 | slonik - -# zcat /usr/share/doc/slony1-2-bin/examples/slon.conf-sample.gz >/etc/slony1/slon.conf -# /etc/init.d/slony1 start -$ slonik_subscribe_set set1 node2 | slonik + +# zcat /usr/share/doc/slony1-2-bin/examples/slon.conf-sample.gz \ + > /etc/slony1/slon.conf + +# /etc/init.d/slony1 start +$ slonik_subscribe_set set1 node2 | slonik