Outils pour utilisateurs

Outils du site


tips_informatiques:bases_de_donnees:postresql:postresql

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();
tips_informatiques/bases_de_donnees/postresql/postresql.txt · Dernière modification: 2010/12/09 00:00 (modification externe)