mise en forme pgsql

This commit is contained in:
Sebastien Dubois 2017-06-21 11:11:50 +02:00
parent bf44e1abc7
commit 10b149c9fb

View file

@ -47,95 +47,111 @@
</section> </section>
<section> <section>
PostgreSQL est une base de données qui met l'accent sur le respect du standard SQL et la sécurité des données. <p>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 Il se base notamment sur des journaux de transaction (WAL), fichiers binaires qui contient toutes les données
avant écriture sur les disques. avant écriture sur les disques.<p>
<pre>
<code># apt install postgresql</code>
# apt install postgresql <code># vim sources.list</code>
# vim sources.list
deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main
</pre>
</section>
Instances : <section>
<pre>
# pg_ctlcluster <version> <cluster> start|stop|restart|reload|status|promote <h3>Instances :</h3>
# pg_lsclusters <code># pg_ctlcluster < version > < cluster > start|stop|restart|reload|status|promote</code>
<code># pg_lsclusters</code>
<code>
Ver Cluster Port Status Owner Data directory Log file 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 9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
# dpkg-reconfigure locales </code>
$ /usr/bin/pg_createcluster <version> <cluster> <code># dpkg-reconfigure locales</code>
<code>$ /usr/bin/pg_createcluster < version > < cluster ></code>
</pre>
</section>
attention à la locales <section>
<p>
* configuration : `/etc/postgresql/<version>/<instance>/` <i>Attention à la locales</i>
* journaux : `/var/log/postgresql/postgresql-<version>-<instance>.log` <ul>
* stockage : `/var/lib/postgresql/<version>/<instance>/` <li><u>configuration :</u><br> <tt>`/etc/postgresql/< version >/< instance >/`</tt></li>
* binaires et bibliothèques : `/usr/lib/postgresql/<version>/<instance>/` <li><u>journaux :</u> <br> <tt>`/var/log/postgresql/postgresql-< version >-< instance >.log`</tt></li>
* etc… <li><u>stockage :</u> <br> <tt>`/var/lib/postgresql/< version >/< instance >/`</tt></li>
<li><u>binaires et bibliothèques :</u> <br> <tt>`/usr/lib/postgresql/< version >/< instance >/`</tt></li>
# sudo -u postgres psql <li>etc…</li>
</p>
pg_hba.conf : </section>
<section>
<pre>
<code># sudo -u postgres psql</code>
<h3>Contenu de pg_hba.conf :</h3>
~~~{.diff} ~~~{.diff}
- local all all peer - local all all peer
+ local all all password + local all all password
~~~ ~~~
<code>$ createuser -P < login ></code>
<code>$ createdb -O < login > < base ></code>
</section>
$ createuser -P <login> <section>
$ createdb -O <login> <base> <pre>
<code>$ dropdb < base ></code>
$ dropdb <base> <code>$ psql -c "ALTER USER < login > WITH PASSWORD 'foo'"</code>
$ psql -c "ALTER USER <login> WITH PASSWORD 'foo'" <code>$ dropuser < login ></code>
$ dropuser <login>
=# SELECT * FROM pg_user; =# SELECT * FROM pg_user;
=# \du =# \du
$ psql -l <code>$ psql -l</code>
= # \d = # \d
= # SELECT * FROM pg_database; = # 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; <code>SELECT pid, datname, usename, client_addr, query_start, waiting, query FROM pg_stat_activity WHERE state='active' ORDER by query_start;</code>
</pre>
</section>
# aptitude install ptop pgbadger pgadmin3 <section>
<pre>
<code># aptitude install ptop pgbadger pgadmin3</code>
<code>$ pg_top</code>
$ pg_top <h3>Faire un VACUUM FULL sur toutes les bases de données :</h3>
<code>$ vacuumdb -a -f -v</code>
<h3>ANALYSE sur toutes les tables d'une base de données :</h3>
Faire un VACUUM FULL sur toutes les bases de données : <code>$ psql mydb</code>
~~~
$ vacuumdb -a -f -v
~~~
ANALYSE sur toutes les tables d'une base de données :
~~~
$ psql mydb
=# ANALYZE; =# ANALYZE;
~~~
Optimisation </section>
shared_buffers : quantité de mémoire dédiée à PostgreSQL <section>
work_mem : quantité de mémoire par process <pre>
max_connections <h3>Optimisation</h3>
<ul>
<li>shared_buffers : quantité de mémoire dédiée à PostgreSQL</li>
<li>work_mem : quantité de mémoire par process</li>
<li>max_connections</li>
</pre>
</section>
<section>
<pre>
<h3>Sauvegarde</h3>
<code>$ pg_dump < base > >dump.sql</code>
<code>$ pg_dumpall >dump.sql</code>
<code>$ psql < base > < dump.sql</code>
sauvegarde <h3>Archivage de WAL :</h3>
$ pg_dump <base> >dump.sql
$ pg_dumpall >dump.sql
$ psql <base> < dump.sql
Archivage de WAL :
wal_level = 'archive' wal_level = 'archive'
archive_command = 'rsync %p backup.example.net:/backup/…/archives/%f' archive_command = 'rsync %p backup.example.net:/backup/…/archives/%f'
+ barman </pre>
<pre>+ barman</pre>
</section>
Usage
<section>
<pre>
<h3>Usage</h3>
=> CREATE TABLE weather ( => CREATE TABLE weather (
city varchar(80), city varchar(80),
temp_lo int, -- low temperature temp_lo int, -- low temperature
@ -145,8 +161,11 @@ Usage
); );
=> 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');
</pre>
</section>
<section>
<pre>
=> SELECT * FROM weather; => SELECT * FROM weather;
=> SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date 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 * FROM weatherWHERE city = 'San Francisco' AND prcp > 0.0;
@ -156,36 +175,47 @@ Usage
=> SELECT * FROM weather INNER JOIN cities ON (weather.city = cities.name); => 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 LEFT OUTER JOIN cities ON (weather.city = cities.name);
=> SELECT * FROM weather w, cities c WHERE w.city = c.name; => SELECT * FROM weather w, cities c WHERE w.city = c.name;
</pre>
</section>
<section>
<pre>
<h4>Pooler de connexions :</h4>
<ul>
<li>pgpool</li>
<li>pgbouncer</li>
</ul>
pooler de connexions : <h4>Streaming Replication</h4>
* pgpool
* pgbouncer
_Streaming Replication_
master / slave master / slave
</section>
<section>
<pre>
<h4>Slony : réplication des données par trigger</h4>
<p>Ne réplique pas le schéma : toutes les bases à créer</p>
<ul>
<li>Avoir une clé primaire sur chaque table à répliquer <br>
(peut être contourné dans certaines conditions, <br>
mais fortement déconseillé par les dév. de Slony)</li>
<li>Ne pas utiliser la commande SQL "TRUNCATE" (avant PG 8.4)</li>
<code>SELECT * from pg_stat_replication;</code>
</pre>
</section>
Slony : réplication des données par trigger <section>
<pre>
ne réplique pas le schéma : toutes les bases à créer <h4> Initialise le cluster Slony</h4>
* 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 slonik_init_cluster | slonik
# Initialise le set de réplication (ensemble de tables à répliquer), notamment installation des triggers.
<h4> Initialise le set de réplication (ensemble de tables à répliquer), notamment installation des triggers.</h4>
slonik_create_set set1 | slonik 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
<code># zcat /usr/share/doc/slony1-2-bin/examples/slon.conf-sample.gz >/etc/slony1/slon.conf</code>
<code># /etc/init.d/slony1 start</code>
<code>$ slonik_subscribe_set set1 node2 | slonik</code>
</pre>
</section> </section>
<section> <section>