Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
tips_informatiques:bases_de_donnees:postresql:postresql [2010/09/20 09:47] nico |
tips_informatiques:bases_de_donnees:postresql:postresql [2010/12/09 00:00] (Version actuelle) |
||
|---|---|---|---|
| Ligne 43: | Ligne 43: | ||
| <code bash> | <code bash> | ||
| sudo su - postgres -c "psql database_to_restore < /path/to/database_dump.sql" | sudo su - postgres -c "psql database_to_restore < /path/to/database_dump.sql" | ||
| + | </code> | ||
| + | |||
| + | ====== Script de backup ====== | ||
| + | |||
| + | __Version:__ PostgreSQL 8.4.4 | ||
| + | |||
| + | __But:__ Créer un script de backup d'une base de données qui puisse être lancé automatiquement (par un cron par exemple) | ||
| + | |||
| + | __Script__: | ||
| + | |||
| + | Dans cet exemple, un dossier est créé pour chaque date de backup, et une rotation sur 10 jours est mise en place. | ||
| + | |||
| + | De plus, la base de données est située sur un serveur distant. | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | DIR=/opt/backups/pgsql/zrodn | ||
| + | DATE=$(/bin/date '+%Y%m%d'); | ||
| + | TENDAY=$(/bin/date -d'10 days ago' '+%Y%m%d'); | ||
| + | |||
| + | /bin/mkdir -p $DIR/$DATE/ | ||
| + | /bin/chown postgres:postgres $DIR/$DATE/ | ||
| + | su - postgres -c "/usr/bin/pg_dump --host zrodn.unige.ch --username my_usename --no-password db_name | gzip -c > $DIR/$DATE/db_name.sql.gz" | ||
| + | |||
| + | rm -rf $DIR/$TENDAY/ | ||
| + | </code> | ||
| + | |||
| + | __Remarque__: | ||
| + | |||
| + | Le script ne contient pas de mot de passe. Cependant, un mot de passe doit exister pour se connecter à la base de données distante. | ||
| + | |||
| + | Celui-ci est situé dans le fichier //.pgpass// de l'utilisateur //postgres// et contient des lignes de la forme suivante: | ||
| + | |||
| + | <code> | ||
| + | hostname:port:username:password | ||
| + | </code> | ||
| + | |||
| + | Et pour connaître le dossier racine de //postgres//: | ||
| + | |||
| + | <code bash> | ||
| + | sudo su postgres -c "cd; pwd" | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====== Créer un trigger pour spécifier la date d'UPDATE ====== | ||
| + | |||
| + | |||
| + | __Version:__ PostgreSQL 8.4.4 | ||
| + | |||
| + | __But:__ Créer un trigger déclenché à chaque update de records qui mette à jour le champ timestamp 'modified' | ||
| + | |||
| + | __Script__: | ||
| + | |||
| + | <code sql> | ||
| + | CREATE OR REPLACE FUNCTION update_modified_column() | ||
| + | RETURNS TRIGGER AS $$ | ||
| + | BEGIN | ||
| + | NEW.modified = now(); | ||
| + | RETURN NEW; | ||
| + | END; | ||
| + | $$ language 'plpgsql'; | ||
| + | |||
| + | |||
| + | CREATE TRIGGER update_documents_modtime BEFORE UPDATE | ||
| + | ON documents FOR EACH ROW EXECUTE PROCEDURE | ||
| + | update_modified_column(); | ||
| </code> | </code> | ||