====== TRIGGER BEFORE DELETE ====== __Version:__ PostgreSQL 8.4.4 __But:__ Créer un trigger faisant un UPDATE lors du DELETE d'un record __Remarques:__ Un trigger doit obligatoirement faire appel à une fonction. On doit donc d'abord déclarer la fonction correspondante. Une fonction de type trigger doit retourner une valeur (FIXME: compléter) afin de permettre à l'action de continuer. Si elle retourne NULL, l'action en cours se termine. La première ligne commentée ci-dessous sert à installer le language 'plpgsql' utilisé ici comme language de la fonction. Cette commande ne doit être lancée qu'une seule fois. --CREATE LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION users_clear_created_by() RETURNS trigger AS 'BEGIN UPDATE tan_users SET created_by = null WHERE created_by = OLD.id; UPDATE tan_users SET modified_by = null WHERE modified_by = OLD.id; RETURN OLD; END;' LANGUAGE 'plpgsql'; DROP TRIGGER IF EXISTS users_clear_created_by ON tan_users; CREATE TRIGGER users_clear_created_by BEFORE DELETE ON tan_users FOR EACH ROW EXECUTE PROCEDURE users_clear_created_by(); ====== 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__: sudo su - postgres -c "psql database_to_restore < /path/to/database_dump.sql" ====== 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. #!/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/ __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: hostname:port:username:password Et pour connaître le dossier racine de //postgres//: sudo su postgres -c "cd; pwd" ====== 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__: 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();