début de relecture / réorganisation
This commit is contained in:
parent
5bc36a67c7
commit
5b057f47c7
|
@ -1,10 +1,9 @@
|
|||
---
|
||||
title: Howto PostgreSQL : installation et utilisation courante
|
||||
title: Howto PostgreSQL
|
||||
categories: databases
|
||||
...
|
||||
|
||||
* Documentation : <http://www.postgresql.org/docs/current/static/>
|
||||
* Wiki : <https://wiki.postgresql.org/wiki/Main_Page>
|
||||
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/postgresql>
|
||||
|
||||
[PostgreSQL](https://www.postgresql.org/) est une base de données qui met l'accent sur le respect du standard SQL et la sécurité des données.
|
||||
|
@ -14,16 +13,16 @@ categories: databases
|
|||
~~~
|
||||
# apt install postgresql
|
||||
|
||||
# # /usr/lib/postgresql/9.6/bin/postgres -V
|
||||
postgres (PostgreSQL) 9.6.4
|
||||
# /usr/lib/postgresql/9.6/bin/postgres -V
|
||||
postgres (PostgreSQL) 9.6.6
|
||||
|
||||
# # systemctl status postgresql
|
||||
# systemctl status postgresql
|
||||
● postgresql.service - PostgreSQL RDBMS
|
||||
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
|
||||
Active: active (exited) since Thu 2017-10-05 20:11:08 CEST; 1 months 7 days ago
|
||||
Process: 6697 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
|
||||
Main PID: 17520 (code=exited, status=0/SUCCESS)
|
||||
Main PID: 5338 (code=exited, status=0/SUCCESS)
|
||||
Tasks: 0 (limit: 4915)
|
||||
Memory: 0B
|
||||
CPU: 0
|
||||
CGroup: /system.slice/postgresql.service
|
||||
~~~
|
||||
|
||||
|
@ -31,7 +30,7 @@ postgres (PostgreSQL) 9.6.4
|
|||
|
||||
Suite à l'installation, une première instance *main* est créée avec les paramètres par défaut.
|
||||
|
||||
### Dépôt PGDG
|
||||
### apt.postgresql.org
|
||||
|
||||
Le *PostgreSQL Global Development Group (PGDG)* maintient un dépôt Debian qui contient plusieurs versions majeures de PostgreSQL (plus récentes et plus anciennes) que celle disponible dans Debian stable, ainsi que plusieurs extensions au serveur.
|
||||
|
||||
|
@ -55,6 +54,78 @@ Enfin, récupérer la clé publique GPG :
|
|||
# wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc |apt-key add -
|
||||
~~~
|
||||
|
||||
|
||||
## Administration basique
|
||||
|
||||
### Pour lister les instances existantes :
|
||||
|
||||
~~~
|
||||
# pg_lsclusters
|
||||
Ver Cluster Port Status Owner Data directory Log file
|
||||
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
|
||||
~~~
|
||||
|
||||
### lister les requêtes actives (PostgreSQL >= 9.2)
|
||||
|
||||
~~~
|
||||
# su - postgres
|
||||
$ psql
|
||||
psql (9.6.6)
|
||||
|
||||
postgres=# SELECT * FROM pg_stat_activity ORDER by query_start;
|
||||
postgres=# SELECT pid, datname, usename, client_addr, query_start, query FROM pg_stat_activity WHERE state='active' ORDER by query_start;
|
||||
~~~
|
||||
|
||||
### Lister les requêtes actives (PostgreSQL < 9.2) :
|
||||
|
||||
~~~
|
||||
# su - postgres
|
||||
$ psql
|
||||
|
||||
postgres=# SELECT * FROM pg_stat_activity WHERE current_query!='<IDLE>';
|
||||
~~~
|
||||
|
||||
### pg_top
|
||||
|
||||
~~~
|
||||
# apt install ptop
|
||||
# su - postgres
|
||||
$ pg_top
|
||||
~~~
|
||||
|
||||
Commandes utiles :
|
||||
|
||||
~~~
|
||||
<space> - update screen
|
||||
A - EXPLAIN ANALYZE (UPDATE/DELETE safe)
|
||||
C - toggle the use of color
|
||||
E - show execution plan (UPDATE/DELETE safe)
|
||||
I - show I/O statistics per process (Linux only)
|
||||
L - show locks held by a process
|
||||
M - sort by memory usage
|
||||
P - sort by CPU usage
|
||||
R - show user table statistics
|
||||
Q - show current query of a process
|
||||
T - sort by time
|
||||
X - show user index statistics
|
||||
c - toggle the display of process commands
|
||||
e - list errors generated by last "kill" or "renice" command
|
||||
i - toggle the displaying of idle processes
|
||||
k - kill processes; send a signal to a list of processes
|
||||
not avilable when connected to a remote database
|
||||
o - specify sort order (cpu, size, res, time, command)
|
||||
index stats (idx_scan, idx_tup_fetch, idx_tup_read)
|
||||
table stats (seq_scan, seq_tup_read, idx_scan, idx_tup_fetch,
|
||||
n_tup_ins, n_tup_upd, n_tup_del)
|
||||
i/o stats (pid, rchar, wchar, syscr, syscw, reads, writes, cwrites, command)
|
||||
s - change number of seconds to delay between updates
|
||||
t - Toggle between cumulative or differential statistics when viewing
|
||||
user table or user index statistics.
|
||||
u - display processes for only one user (+ selects all users)
|
||||
~~~
|
||||
|
||||
|
||||
|
||||
### Multiples versions et instances (clusters)
|
||||
|
||||
Une surcouche Debian permet de gérer très simplement plusieurs versions et plusieurs instances d'une même version de PostgreSQL. Cela permet entre autre de faciliter les migrations d'une version majeure à une autre.
|
||||
|
@ -128,7 +199,7 @@ La plupart des changements de configuration peuvent être pris en compte à chau
|
|||
2016-12-20 17:02:58 CET [13555]: [3-1] user=,db= LOG: parameter "log_temp_files" changed to "6MB"
|
||||
~~~
|
||||
|
||||
### pgass
|
||||
### pgpass
|
||||
|
||||
Pour se connecter plus facilement à postgresql (avec `psql` mais aussi `pgdump` etc), on peut utiliser le fichier `~/.pgpass` avec comme format
|
||||
|
||||
|
@ -723,18 +794,6 @@ Par défaut, PostgreSQL utilise le schéma *public* mais il est possible d'utili
|
|||
|
||||
## Monitoring
|
||||
|
||||
* Lister les requêtes actives (PostgreSQL < 9.2) :
|
||||
|
||||
~~~
|
||||
SELECT * FROM pg_stat_activity WHERE current_query!='<IDLE>';
|
||||
~~~
|
||||
|
||||
* lister les requêtes actives (PostgreSQL >= 9.2) :
|
||||
|
||||
~~~
|
||||
SELECT pid, datname, usename, client_addr, query_start, waiting, query FROM pg_stat_activity WHERE state='active' ORDER by query_start;
|
||||
~~~
|
||||
|
||||
* lister les connections en idle qui n'ont effectué aucune requête depuis plus d'un jour :
|
||||
|
||||
~~~
|
||||
|
@ -790,6 +849,8 @@ Et taper `?` pour la liste de toutes les commandes possibles.
|
|||
|
||||
## VACUUM
|
||||
|
||||
TODO : expliquer davantage
|
||||
|
||||
Faire un VACUUM FULL sur toutes les bases de données :
|
||||
|
||||
~~~
|
||||
|
@ -871,6 +932,17 @@ Testing: 10 clients with 50 transactions (5 samples)
|
|||
pg_benchmark executed 30 tests in about 5 seconds
|
||||
~~~
|
||||
|
||||
## Outils
|
||||
|
||||
* pgbouncer
|
||||
* pgpool -> rmw
|
||||
* barman
|
||||
* pgbadger
|
||||
* phpmyadmin / pgadmin
|
||||
* pg_bench_*
|
||||
|
||||
(TODO)
|
||||
|
||||
## Réplication
|
||||
|
||||
Plusieurs solutions de réplication plus ou moins avancées existent avec PostgreSQL :
|
||||
|
@ -883,3 +955,21 @@ Plusieurs solutions de réplication plus ou moins avancées existent avec Postgr
|
|||
Pour plus de détails sur ces solutions, voir ce post sur [dba.stackexange.com](https://dba.stackexchange.com/questions/73812/postgresql-streaming-versus-file-based-replication-in-terms-of-server-behavior). Pour d'autres types de solutions pour avoir de la haute disoponibilite, postgresql a [une page sur cela dans leur documentation](https://www.postgresql.org/docs/current/static/different-replication-solutions.html).
|
||||
|
||||
> *Note* : l'expédition des logs entre des serveurs pgsql nécessite qu'ils soient à la même version majeure.
|
||||
|
||||
|
||||
### Réplication native (streaming)
|
||||
|
||||
Voir [/HowtoPostgreSQL/Replication]().
|
||||
|
||||
### Slony
|
||||
|
||||
Voir [/HowtoPostgreSQL/Slony]().
|
||||
|
||||
|
||||
## FAQ
|
||||
|
||||
pg_top ne montre rien ?
|
||||
|
||||
essayer une autre version du paquet ptop
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue