Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
tips_informatiques:bases_de_donnees:postresql:postresql [2010/06/14 15:59] nico créée |
tips_informatiques:bases_de_donnees:postresql:postresql [2010/12/09 00:00] (Version actuelle) |
||
---|---|---|---|
Ligne 28: | Ligne 28: | ||
BEFORE DELETE ON tan_users FOR EACH ROW | BEFORE DELETE ON tan_users FOR EACH ROW | ||
EXECUTE PROCEDURE users_clear_created_by(); | EXECUTE PROCEDURE users_clear_created_by(); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====== Restaurer un dump ====== | ||
+ | |||
+ | __Version:__ PostgreSQL 8.4.4 | ||
+ | |||
+ | __But:__ | ||
+ | |||
+ | Restaurer une base de donnée à partir d'un fichier généré avec la commande //pg_dump// | ||
+ | |||
+ | __Commande__: | ||
+ | |||
+ | <code bash> | ||
+ | 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> |