Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :
Paternité
Pas d'utilisation commerciale
Partage des conditions initiales à l'identique
Apparitions de la communauté internationale
OVER)'EXPLAINUNIQUE différableGRANT ALLWHENpg_basebackup utilisable sur un esclaveLATERAL dans un SELECTCOPY FREEZEBRININSERT ... ON CONFLICT { UPDATE | IGNORE }SKIP LOCKEDSQL/MED
pg_stat_statements, ajout de pg_stat_sslGROUPING SETS, CUBE et ROLLUP)VACUUM FREEZE, CHECKPOINT, ancien snapshotSAVEPOINT disponible pour sauvegarde des modifications d'une transaction à un instant tBEGIN ISOLATION LEVEL xxx;read commitedrepeatable readserializableCréation de types de données et
pg_hba.confLes algorithmes suivants sont supportés :
B-tree (par défaut)GiST / SP-GiSTHashGIN (version 8.2)BRIN (version 9.5)CHECK : prix > 0NOT NULL : id_client NOT NULLid_client UNIQUEUNIQUE NOT NULL ==> PRIMARY KEY (id_client)produit_id REFERENCES produits(id_produit)EXCLUDE : EXCLUDE USING gist (room WITH =, during WITH &&)INSERT, COPY, UPDATE, DELETETRUNCATEFOR STATEMENT)FOR EACH ROW)Site de petites annonces :
N'hésitez pas, c'est le moment !
Étapes :
$ tar xvfj postgresql-<version>.tar.bz2
$ cd postgresql-<version>
$ ./configure
$ make
$ make install--prefix=répertoire--with-pgport=port--with-openssl--enable-nls--with-perl$ pg_config --configurecheck de la commande make$ make checkexport PATH=/usr/local/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
export MANPATH=$MANPATH:/usr/local/pgsql/share/man
export PGDATA=/usr/local/pgsql/data$ initdb --data /usr/local/pgsql/data--data pour les fichiers de données--waldir pour les journaux de transactions--pwprompt pour configurer immédiatement le mot de passe de l'utilisateur postgres--data-checksums pour ajouter des sommes de contrôle sur les fichier de données# /etc/init.d/postgresql [action]$ pg_ctl --pgdata /usr/local/pgsql/data --log logfile [action][action] dépend du besoin
apt-get install postgresql-<version majeure>
yum install postgresqlxx-server
postgres systèmepostgrespg_hba.confpostgresql.conf
InstallationN'hésitez pas, c'est le moment !
Les outils graphiques et console :
PostgreSQLcreatedb: ajouter une nouvelle base de donnéescreatelang: ajouter un langage de procédures à une base (<v10)createuser: ajouter un nouveau compte utilisateurdropdb: supprimer une base de donnéesdroplang: supprimer un langage de procédures (<v10)dropuser: supprimer un compte utilisateurpg_dumpall: sauvegarder l'instance PostgreSQLpg_dump: sauvegarder une base de donnéespg_restore: restaurer une base de données PostgreSQLvacuumdb: récupérer l'espace inutilisé (VACUUM FULL) et/ou mettre à jour les statistiques de l'optimiseur (ANALYZE)reindexdb: réindexer une base de données PostgreSQLclusterdb: réorganiser une table en fonction d'un indexpg_ctl: lancer, arrêter, relancer, promouvoir le serveur PostgreSQL-W | --password-w | --no-password$PGPASSWORD.pgpass
nom_hote:port:database:nomutilisateur:motdepassepostgres$ psql
  base=#\? [motif]\h [motif]\q\encoding [ENCODING]\password [USERNAME]\conninfo\connect [DBNAME|- USER|- HOST|- PORT|-]\c [DBNAME|- USER|- HOST|- PORT|-]\timing\! [COMMAND]\cd [DIR]\l\dn\d{t|i|s|v|m}[S][+] [motif]\df[+] [motif]\da [motif]\du[+]\dp\ddp\drds\db\dx\dD[S+]\dT[S+]\do [motif]\dF [motif]\dFd [motif]\dFt [motif]\dFp [motif]\dc [motif]\dC [motif]\sv\sf;\g\gxctrl-R suivi d'un extrait de texte représentatif\gexec\e\ev nom_vue\ef nom_fonction\g [FICHIER]\p\w [FICHIER]\r\i FICHIER\o FICHIER\echo texte...\qecho texte...\set [NOM [VALEUR]]\unset NOMON_ERROR_STOP: on ou offON_ERROR_ROLLBACK: on, off ou interactiveAUTOCOMMIT: on ou off\if\elif\else\endif${HOME}
.psqlrc-X.Y.psqlrc-X.psqlrc.psqlrc contient des méta-commandes \set
\set ON_ERROR_ROLLBACK interactive-c "ordre SQL"-f nom_fichier.sql\i nom_fichier.sqlAUTOCOMMITBEGIN;COMMIT;-1 ou --single-transaction\encodingPositionner des variables
\set nom_table 'ma_table'
SELECT * FROM :"nom_table";
\set valeur_col1 'test'
SELECT * FROM :"nom_table" WHERE col1 = :'valeur_col1';\prompt 'invite' nom_variable\unset variableON_ERROR_ROLLBACKON_ERROR_STOP-A | --no-align-t | --tuples-only-x | --expanded-H | --html-T TEXT | --table-attr TEXT-F CHAINE | --field-separator CHAINE-z | --field-separator-zero-R CHAINE | --record-separator CHAINE-0 | --record-separator-zero\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]\pset option [ valeur ]\pset expanded on\pset title 'Résultat de la requête'\pset format htmlcrontab -eSauvegarder une base et classer l'archive
#!/bin/bash
t=`mktemp`
pg_dump $1 | gzip > $t
d=`eval date +%d%m%y-%H%M%S`
mv $t /backup/${1}_${d}.dump.gz
exit 0" temBoard est un outil permettant à un DBA de mener à bien la plupart de ses tâches courantes.
Le serveur web est installé de façon centralisée et un agent est déployé pour chaque instance.
vacuum, analyze, reindex)
Notes: Multiplateforme
Mais ne semble plus maintenu
N'hésitez pas, c'est le moment !
PostgreSQL
pg_database\l dans psqltemplate1 est utiliséeCREATE DATABASE
createdbDROP DATABASE
dropdbALTER DATABASE
CREATE/DROP/ALTER USERCREATE/DROP/ALTER GROUPpg_roles\du dans psqlCREATE ROLE
createuser
LOGIN par défautDROP ROLE
dropuserALTER ROLE
GRANTREVOKEWITH GRANT OPTIONSET ROLEpg_hba.conflocalhosthostsslhostnosslhostssl nécessite d'avoir activé ssl dans postgresql.confall (pour toutes les bases)sameuser, samerole (pour la base de même nom que le rôle)replication (pour les connexions de réplication)all (pour tous les rôles)host, hostssl et hostnosslmaptrustrejectpasswordmd5ldap, radius, certgss, sspiident, peer, pambsdcrypt depuis la version 8.4krb5 depuis la version 9.3Un exemple:
TYPE    DATABASE  USER        CIDR-ADDRESS    METHOD
local   all       postgres                    ident
local   web       web                         md5
local   sameuser  all                         ident
host    all       postgres    127.0.0.1/32    ident
host    all       all         127.0.0.1/32    md5
host    all       all         89.192.0.3/8    md5
hostssl recherche recherche   89.192.0.4/32   md5à ne pas suivre…
VACUUMANALYZEREINDEXdefault_statistics_targetREINDEX régulièrement permet
VACUUM ne provoque pas de réindexationVACUUM FULL réindexeCLUSTER, alternative à VACUUM FULLVACUUM FULL suivi de REINDEX avant la 9.0CLUSTER nécessite près du double de l'espace disque utilisé pour stocker la table et ses indexpg_dumppg_dumpallpg_dump -f b1.dump b1PostgreSQL demande peu de travail au quotidien.
À l'installation, certaines tâches doivent être automatisées, par exemple la sauvegarde, les VACUUM.
Pour le reste, il s'agit surtout de surveiller la bonne exécution des scripts automatisés et le contenu des journaux applicatifs.
N'hésitez pas, c'est le moment !
pg_dumppg_dumpall-F
p : plain, SQLt : tarc : custom (spécifique PostgreSQL)d : directory-Z : de 0 à 9-f : fichier où est stockée la sauvegarde-f, sur la sortie standard--schema-only ou -s : uniquement la structure--data-only ou -a : uniquement les données--section
pre-data, la définition des objets (hors contraintes et index)data, les donnéespost-data, la définition des contraintes et index-n <schema> : uniquement ce schéma-N <schema> : tous les schémas sauf celui-là-t <table> : uniquement cette table-T <table> : toutes les tables sauf celle-là--exclude-table-data=<table>--strict-names-j <nombre_de_threads>-O : ignorer le propriétaire-x : ignorer les droits--no-tablespaces : ignorer les tablespaces--inserts : remplacer COPY par INSERT-v : pour voir la progression-F
p : plain, SQL-f : fichier où est stockée la sauvegarde-f, sur la sortie standard-g : tous les objets globaux-r : uniquement les rôles-t : uniquement les tablespaces--no-role-passwords : pour ne pas sauvegarder les mots de passe
-h / $PGHOST / socket Unix-p / $PGPORT / 5432-U / $PGUSER / utilisateur du système$PGPASSWORD.pgpasspg_dump | bzip2-b
-n/-N et/ou -t/-T--no-blobs
bytea_output
escapehex-f pour indiquer le fichier contenant la sauvegarde
-f, lit l'entrée standard-1 pour tout restaurer en une seule transaction-e pour afficher les ordres SQL exécutésON_ERROR_ROLLBACK/ON_ERROR_STOP-F inutile, même si présent)-f (fichier en sortie)-s : uniquement la structure-a : uniquement les données--section
pre-data, la définition des objets (hors contraintes et index)data, les donnéespost-data, la définition des contraintes et index-n <schema> : uniquement ce schéma-N <schema> : tous les schémas sauf ce schéma-t <table> : cette relation-T <trigger> : ce trigger-I <index> : cet index-P <fonction> : cette fonction--strict-names, pour avoir une erreur si l'objet est inconnu-l : récupération de la liste des objets-L <liste_objets> : restauration uniquement des objets listés dans ce fichier-j <nombre_de_threads>-O : ignorer le propriétaire-x : ignorer les droits--no-tablespaces : ignorer le tablespace-1 pour tout restaurer en une seule transaction-c : pour détruire un objet avant de le restaurerANALYZE après une restauration| Simplicité | Coupure | Restauration | Fragmentation | |
|---|---|---|---|---|
| copie à froid | facile | longue | rapide | conservée | 
| snapshot FS | facile | aucune | rapide | conservée | 
| pg_dump | facile | aucune | lente | perdue | 
| rsync + copie à froid | moyen | courte | rapide | conservée | 
| PITR | difficile | aucune | rapide | conservée | 
N'hésitez pas, c'est le moment !
check_postgres, en corrigeant certainescheck_postgreslog_destinationlogging_collector
log_directory, log_filename, log_file_modelog_rotation_age, log_rotation_size, log_truncate_on_rotationsyslog (Unix)eventlog (Windows)log_min_messageslog_min_error_statementlog_error_verbositylog_min_duration_statementlog_statementlog_durationlog_connections, log_disconnectionslog_autovacuum_min_durationlog_checkpointslog_lock_waitslog_temp_fileslog_line_prefixlc_messageslog_timezonelog_statement et log_durationlog_min_duration_statementExemple:
LOG:  duration: 112.615 ms  statement: select  * from t1 where c1=4;PANIC:  could not write to file "pg_wal/xlogtemp.9109": 
        No space left on deviceLOG:  received SIGHUP, reloading configuration filesLOG:  temporary file: path "base/pgsql_tmp/pgsql_tmp9894.0", 
      size 26927104log_destination, log_line_prefix et lc_messageslog_connections, log_disconnectionslog_checkpoints, log_lock_waits, log_temp_fileslog_autovacuum_min_durationlog_min_duration_statement--outfile--begin, --end--dbname, --dbuser, --dbclient, --appname
--logfile, les fichiers à traiter--service, filtre sur le service unique à traiter--detail, niveau de détails du rapport--print, pour afficher le rapport sur la sortie standard--save, pour sauvegarder le rapport dans un fichier--mailto, pour envoyer le rapport par mail/usr/sbin/logwatch --detail Med --service postgresql --range All/usr/sbin/logwatch --detail Med --service postgresql \
                   --range Yesterday --output mail \
                   --mailto admin@mydom.com --format htmlEMAIL: astreinte@dalibo.com
MAILSUBJECT: HOST Postgres fatal errors (FILE)
FILE: /var/log/postgresql-%Y-%m-%d.log
INCLUDE: PANIC:
INCLUDE: FATAL:
EXCLUDE: database ".+" does not exist
INCLUDE: temporary file
INCLUDE: reloading configuration filesExemple:
[1] Between lines 123005 and 147976, occurs 39 times.
First:  Jan  1 00:00:01 rojogrande postgres[4306]
Last:   Jan  1 10:30:00 rojogrande postgres[16854]
Statement: user=root,db=rojogrande 
        FATAL: password authentication failed for user "root"track_activitiestrack_activity_query_sizetrack_countstrack_io_timingtrack_functionsstats_temp_directory
SELECT datname, numbackends FROM pg_stat_database GROUP BY 1;
SELECT datname, count(*) FROM pg_stat_activity WHERE datname IS NOT NULL GROUP BY 1;SELECT datname, pg_database_size(oid) FROM pg_database;SELECT d.datname, count(*) FROM pg_locks l
JOIN pg_database d ON l.database=d.oid
GROUP BY d.datname ORDER BY d.datname;hitratio)check_postgres et check_pgactivitycheck_postgres.pl