diff --git a/reveal/postgresql.html b/reveal/postgresql.html index 4425f53..5667e79 100644 --- a/reveal/postgresql.html +++ b/reveal/postgresql.html @@ -46,14 +46,150 @@

PostgreSQL

-https://wiki.evolix.org/HowtoPostgreSQL - -https://wiki.evolix.org/HowtoPostgreSQLReplication - -https://wiki.evolix.org/HowtoPostgreSQLStreamingReplication +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 + +Instances : + +# pg_ctlcluster 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 + +attention à la locales + + * configuration : `/etc/postgresql///` + * journaux : `/var/log/postgresql/postgresql--.log` + * stockage : `/var/lib/postgresql///` + * binaires et bibliothèques : `/usr/lib/postgresql///` + * etc… + +# sudo -u postgres psql + +pg_hba.conf : + +~~~{.diff} +- local all all peer ++ local all all password +~~~ + +$ createuser -P +$ createdb -O + +$ dropdb +$ psql -c "ALTER USER WITH PASSWORD 'foo'" +$ dropuser +=# SELECT * FROM pg_user; +=# \du + +$ 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; + +# 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 >dump.sql +$ pg_dumpall >dump.sql + +$ psql < dump.sql + +Archivage de WAL : +wal_level = 'archive' +archive_command = 'rsync %p backup.example.net:/backup/…/archives/%f' ++ barman + + +Usage + +=> CREATE TABLE weather ( + city varchar(80), + temp_lo int, -- low temperature + temp_hi int, -- high temperature + prcp real, -- precipitation + date date +); + +=> 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; + + +pooler de connexions : +* pgpool +* pgbouncer + + +_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; + +# 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 + + + +Autres bases de données + +* MySQL / MariaDB : base de données très populaire au sein des infrastructures web https://wiki.evolix.org/HowtoMySQL + +NoSQL : https://wiki.evolix.org/HowtoSQLite https://wiki.evolix.org/HowtoMemcached https://wiki.evolix.org/HowtoRedis @@ -61,8 +197,6 @@ https://wiki.evolix.org/HowtoMongoDB https://wiki.evolix.org/HowtoElasticsearch CouchDB, Cassandra, Riak, Neo4j - -