fix syntax issues/details in HowtoPostgreSQL
This commit is contained in:
parent
24925e3105
commit
80cecd8a22
|
@ -134,7 +134,7 @@ $ createuser -P <login>
|
||||||
$ createdb -O <login> <base>
|
$ createdb -O <login> <base>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Comme pour les instances, par défaut la base sera créé avec l'encodage du système. Si le système est en UTF-8 par défaut, la base créée sera en UTF-8. On peut spécifier un encodage alternatif avec l'option `-E-`.
|
Comme pour les instances, par défaut la base sera créé avec l'encodage du système. Si le système est en UTF-8 par défaut, la base créée sera en UTF-8. On peut spécifier un encodage alternatif avec l'option `-E`.
|
||||||
|
|
||||||
* Suppression d'une base de données :
|
* Suppression d'une base de données :
|
||||||
|
|
||||||
|
@ -303,12 +303,12 @@ $ pg_restore -F c all.dump
|
||||||
Optimisations pour la restauration :
|
Optimisations pour la restauration :
|
||||||
|
|
||||||
* paralléliser la restauration : `pg_restore -j <nb de cœurs CPU>` (ne pas compter les cœurs hyperthreadés) ;
|
* paralléliser la restauration : `pg_restore -j <nb de cœurs CPU>` (ne pas compter les cœurs hyperthreadés) ;
|
||||||
* augmenter autant que possible le `_maintenance_work_mem_` (attention, il sera multiplié par le nombre de jobs utilisés pour la restauration). Dans tous les cas, ne pas dépasser les 2 Go. Peut être fait dans la conf ou dans une session ;
|
* augmenter autant que possible le `_maintenance_work_mem_` (attention, il sera multiplié par le nombre de processus utilisés pour la restauration). Dans tous les cas, ne pas dépasser les 2 Go. Peut être fait dans la conf ou dans une session ;
|
||||||
* Définir le `_synchronous_commit_` à `_off_`.
|
* Mettre la directive `synchronous_commit` à `off`.
|
||||||
|
|
||||||
#### Sauvegarde du datadir
|
#### Sauvegarde du datadir
|
||||||
|
|
||||||
Doc de référence : http://www.postgresql.org/docs/9.2/static/continuous-archiving.html
|
Doc de référence : http://www.postgresql.org/docs/9.4/static/continuous-archiving.html
|
||||||
|
|
||||||
Le principe est le suivant :
|
Le principe est le suivant :
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ Ainsi, dès qu'un WAL est marqué comme complété (`pg_xlog/archive_status/*.re
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
postgres$ psql -c "SELECT pg_start_backup('evobackup')"
|
postgres$ psql -c "SELECT pg_start_backup('evobackup')"
|
||||||
# rsync -a --delete --exclude /pg_xlog/* --exclude /postmaster.* ~postgres/9.2/main/ backup.example.com/backup/…/base/
|
# rsync -a --delete --exclude /pg_xlog/* --exclude /postmaster.* ~postgres/9.4/main/ backup.example.com/backup/…/base/
|
||||||
postgres$ psql -c "SELECT pg_stop_backup()"
|
postgres$ psql -c "SELECT pg_stop_backup()"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ postgres$ psql -c "SELECT pg_stop_backup()"
|
||||||
S'assurer que PostgreSQL est éteint, et restaurer le datadir :
|
S'assurer que PostgreSQL est éteint, et restaurer le datadir :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# rsync -a --exclude /pg_xlog/* backup.example.com/backup/…/base/ ~postgres/9.2/main/
|
# rsync -a --exclude /pg_xlog/* backup.example.com/backup/…/base/ ~postgres/9.4/main/
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Attention à ne surtout pas effacer le contenu de `pg_xlog/`, qui peut contenir le dernier WAL courant (donc pas encore copié sur le serveur de backup).
|
Attention à ne surtout pas effacer le contenu de `pg_xlog/`, qui peut contenir le dernier WAL courant (donc pas encore copié sur le serveur de backup).
|
||||||
|
@ -383,7 +383,7 @@ On peut maintenant "utiliser" notre base de données avec le client en ligne Pos
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ psql base login
|
$ psql base login
|
||||||
ma_base=#
|
ma_base=>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Voici quelques commandes de base :
|
Voici quelques commandes de base :
|
||||||
|
@ -402,8 +402,8 @@ SELECT current_date; = date actuelle
|
||||||
Pour changer de base de données, deux possibilités :
|
Pour changer de base de données, deux possibilités :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
=# \c base;
|
=> \c base;
|
||||||
=# USE base;
|
=> USE base;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Création de table
|
### Création de table
|
||||||
|
@ -427,14 +427,14 @@ Remarque : on peut aussi définir ses propres types de données
|
||||||
La syntaxe classique pour créer/supprimer une table :
|
La syntaxe classique pour créer/supprimer une table :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
CREATE TABLE ma_table (col1 type, […], coln type);
|
=> CREATE TABLE ma_table (col1 type, […], coln type);
|
||||||
DROP TABLE ma_table;
|
=> DROP TABLE ma_table;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Pour la forme un petit exemple tiré de la doc de PostgreSQL :
|
Pour la forme un petit exemple tiré de la doc de PostgreSQL :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
CREATE TABLE weather (
|
=> CREATE TABLE weather (
|
||||||
city varchar(80),
|
city varchar(80),
|
||||||
temp_lo int, -- low temperature
|
temp_lo int, -- low temperature
|
||||||
temp_hi int, -- high temperature
|
temp_hi int, -- high temperature
|
||||||
|
@ -443,14 +443,14 @@ CREATE TABLE weather (
|
||||||
);
|
);
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Note : deux tirets _--_ introduisent des commentaires
|
Note : deux tirets `--` introduisent des commentaires.
|
||||||
|
|
||||||
Pour mettre à jour des tables :
|
Pour mettre à jour des tables :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
alter table evosondage_admin add cycle varchar(25);
|
=> ALTER TABLE evosondage_admin ADD cycle varchar(25);
|
||||||
alter table evosondage_admin alter column cycle set not null;
|
=> ALTER TABLE evosondage_admin ALTER column cycle SET not null;
|
||||||
alter table evosondage_admin drop column annee;
|
=> ALTER TABLE evosondage_admin DROP column annee;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Insertion de données
|
### Insertion de données
|
||||||
|
@ -458,37 +458,37 @@ alter table evosondage_admin drop column annee;
|
||||||
Insertion de tous les champs d'une table :
|
Insertion de tous les champs d'une table :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
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');
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Insertion en précisant les champs :
|
Insertion en précisant les champs :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
|
=> INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
|
||||||
VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
|
VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Insertion à partir d'un fichier externe :
|
Insertion à partir d'un fichier externe :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
COPY weather FROM '/home/user/weather.txt';
|
=> COPY weather FROM '/home/user/weather.txt';
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Note : voir [http://www.postgresql.org/docs/current/interactive/sql-copy.html]
|
Note : voir http://www.postgresql.org/docs/current/interactive/sql-copy.html
|
||||||
|
|
||||||
### Gestion des indexes
|
### Gestion des indexes
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
CREATE INDEX mytable_idx1 ON mytable(col1);
|
=> CREATE INDEX mytable_idx1 ON mytable(col1);
|
||||||
REINDEX TABLE mytable;
|
=> REINDEX TABLE mytable;
|
||||||
DROP INDEX mytable_idx1;
|
=> DROP INDEX mytable_idx1;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Pour réindexer une base de données complète :
|
Pour réindexer une base de données complète :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ psql mydb
|
$ psql mydb
|
||||||
=# REINDEX DATABASE mydb
|
=> REINDEX DATABASE mydb;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Extraction de données
|
### Extraction de données
|
||||||
|
@ -496,50 +496,47 @@ $ psql mydb
|
||||||
Rien ne vaut des exemples :
|
Rien ne vaut des exemples :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
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;
|
||||||
SELECT DISTINCT city FROM weather ORDER BY city;
|
=> SELECT DISTINCT city FROM weather ORDER BY city;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Avec des jointures :
|
Avec des jointures :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
SELECT * FROM weather, cities WHERE city = name;
|
=> SELECT * FROM weather, cities WHERE city = name;
|
||||||
SELECT weather.city, weather.temp_lo, cities.location
|
=> SELECT weather.city, weather.temp_lo, cities.location FROM weather, cities WHERE cities.name = weather.city;
|
||||||
FROM weather, cities WHERE cities.name = weather.city;
|
=> 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
|
=> SELECT * FROM weather w, cities c WHERE w.city = c.name;
|
||||||
(weather.city = cities.name);
|
|
||||||
SELECT * FROM weather w, cities c WHERE w.city = c.name;
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Avec des fonctions (Aggregate Functions) :
|
Avec des fonctions (Aggregate Functions) :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
SELECT max(temp_lo) FROM weather;
|
=> SELECT max(temp_lo) FROM weather;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Attention, les "Aggregate Functions" ne peuvent être utilisées dans la clause WHERE
|
Attention, les "Aggregate Functions" ne peuvent être utilisées dans la clause WHERE.
|
||||||
Ainsi la requête suivante est fausse :
|
Ainsi la requête suivante est fausse :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
SELECT city FROM weather WHERE temp_lo = max(temp_lo);
|
=> SELECT city FROM weather WHERE temp_lo = max(temp_lo);
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
On devra donc faire :
|
On devra donc faire :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
SELECT city FROM weather WHERE
|
=> SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
|
||||||
temp_lo = (SELECT max(temp_lo) FROM weather);
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
On pourra bien sûr utilise _GROUP BY…_, _HAVING…_, etc.
|
On pourra bien sûr utilise _GROUP BY…_, _HAVING…_, etc.
|
||||||
|
|
||||||
Pour envoyer l'output dans un fichier :
|
Pour envoyer le résultat dans un fichier :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
SELECT * FROM weather WHERE temp_lo=10 \g '/tmp/output'
|
=> SELECT * FROM weather WHERE temp_lo=10 \g '/tmp/output'
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Mise à jour des données
|
### Mise à jour des données
|
||||||
|
@ -547,8 +544,7 @@ SELECT * FROM weather WHERE temp_lo=10 \g '/tmp/output'
|
||||||
Toujours avec un exemple :
|
Toujours avec un exemple :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
UPDATE weather SET temp_hi = temp_hi - 2,
|
=> UPDATE weather SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2 WHERE date > '1994-11-28';
|
||||||
temp_lo = temp_lo - 2 WHERE date > '1994-11-28';
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Suppression des données
|
### Suppression des données
|
||||||
|
@ -556,13 +552,14 @@ temp_lo = temp_lo - 2 WHERE date > '1994-11-28';
|
||||||
Encore avec un exemple :
|
Encore avec un exemple :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
DELETE FROM weather WHERE city = 'Hayward';
|
=> DELETE FROM weather WHERE city = 'Hayward';
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Pour effacer toutes les données d'une table :
|
Pour effacer toutes les données d'une table :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
DELETE FROM weather;
|
=> DELETE FROM weather;
|
||||||
|
~~~
|
||||||
|
|
||||||
### Schémas
|
### Schémas
|
||||||
|
|
||||||
|
@ -571,7 +568,7 @@ Par défaut, PostgreSQL utilise le schéma *public* mais il est possible d'utili
|
||||||
* Créer un nouveau schéma :
|
* Créer un nouveau schéma :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
=> CREATE SCHEMA foo
|
=> CREATE SCHEMA foo;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Lister les schémas d'une base :
|
* Lister les schémas d'une base :
|
||||||
|
@ -586,7 +583,6 @@ Par défaut, PostgreSQL utilise le schéma *public* mais il est possible d'utili
|
||||||
=> \dt foo.
|
=> \dt foo.
|
||||||
=> \di foo.
|
=> \di foo.
|
||||||
~~~
|
~~~
|
||||||
~~~
|
|
||||||
|
|
||||||
## Monitoring
|
## Monitoring
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue