====== Administration de PostgreSQL ====== ===== Arrêt / Démarrage ===== Sur une base de ''/etc/init.d/skeleton'', peut être encore largement amélioré : #!/bin/sh -e # /etc/init.d/postgresql # $Id # PGDIR="/usr/local/pgsql" PGBIN="$PGDIR/bin" PGDATA="/usr/local/pgsql/data" PGLOG="/var/log/postgresql.log" DESC="Postgresql database server" USER="postgres" test -x $PGDIR || exit 0 case "$1" in start) echo -n "Starting $DESC: " su - $USER -- $PGBIN/pg_ctl -D $PGDATA start echo -n "" ;; stop) echo -n "Stopping $DESC: " su - $USER -- $PGBIN/pg_ctl -D $PGDATA -m f stop echo -n "" ;; reload) echo -n "Reloading configuration $DESC: " su - $USER -- $PGBIN/pg_ctl -D $PGDATA reload echo -n "" ;; restart|force-reload) echo -n "Restarting $DESC: " su - $USER -- $PGBIN/pg_ctl -D $PGDATA -m f stop sleep 1 su - $USER -- $PGBIN/pg_ctl -D $PGDATA start echo -n "" ;; status) echo -n "$DESC current status: " su - $USER -- $PGBIN/pg_ctl -D $PGDATA status echo -n "" ;; *) echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" echo -n "" exit 1 ;; esac exit 0 ===== Administration ===== ====En taches separees==== À faire tourner par cron ou équivalent. Exemple avec ''/etc/crontab'' : 46 6 * * * root /root/adm/postgresql.sh vacuum 00 7 * * * root /root/adm/postgresql.sh backup #!/bin/bash # manipulations sur le serveur postgresql, via cron # # $Id: postgresql-adm-v1.sh 72 2007-08-08 11:18:26Z maintenance $ PGDIR="/usr/local/pgsql" PGBIN="$PGDIR/bin" PGDATA="/usr/local/pgsql/data" PGOPTIONS='-c client_min_messages=error' DESC="Postgresql database server" USER="postgres" DATE=$(date +%Y%m%d) TMPFILE=$(mktemp /tmp/postgresql-adm.XXXXXXXX) || exit 1 HOST=$(hostname) BACKUPDIR="/opt/postgres-data" test -x $PGDIR || exit 0 case "$1" in status) echo -n "$DESC current status: " >> $TMPFILE 2>&1 su - $USER -c "$PGBIN/pg_ctl -D $PGDATA status" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 ;; vacuum) echo -n "$DESC vacuuming all databases: " >> $TMPFILE 2>&1 export $PGOPTIONS >> /dev/null 2>&1 su - $USER -c "$PGBIN/vacuumdb --full --analyze --all" >> $TMPFILE 2>&1 su - $USER -c "$PGBIN/reindexdb --all --quiet" >> $TMPFILE 2>&1 # su - $USER -c "$PGBIN/reindexdb --all" >> $TMPFILE 2>&1 echo -n "" >> $TMPFILE 2>&1 ;; analyze) echo -n "$DESC analyzing all databases: " >> $TMPFILE 2>&1 su - $USER -c "$PGBIN/vacuumdb --analyze --all" >> $TMPFILE 2>&1 echo -n "" >> $TMPFILE 2>&1 ;; backup) echo "$DESC backuping: " >> $TMPFILE 2>&1 mkdir -p $BACKUPDIR >> $TMPFILE 2>&1 su - $USER -c "$PGBIN/pg_dumpall > $BACKUPDIR/dumpall.sql" >> $TMPFILE 2>&1 su - $USER -c "savelog -c 15 -p -j $BACKUPDIR/dumpall.sql" >> $TMPFILE 2>&1 echo "" ;; *) echo "Usage: $0 {status|vacuum|analyze|backup}" echo "" exit 1 ;; esac if [ -s $TMPFILE ] then /bin/cat $TMPFILE | /usr/bin/mailx -s "$HOST : postgresql" admin@example.com -- -f root@example.com fi /bin/rm -f $TMPFILE exit 0 ====One shot==== Toujours en //crontab//, ''/etc/crontab'' : 46 6 * * * root /root/adm/postgresql-adm.sh #!/bin/bash # manipulations sur le serveur postgresql, via cron # # $Id: postgresql-adm-v2.sh 72 2007-08-08 11:18:26Z maintenance $ PGDIR="/usr/local/pgsql" PGBIN="$PGDIR/bin" PGDATA="/usr/local/pgsql/data" PGOPTIONS='-c client_min_messages=error' DESC="db server" USER="postgres" DATE=$(date +%Y%m%d) TMPFILE=$(mktemp /tmp/postgresql-adm.XXXXXXXX) || exit 1 HOST=$(hostname) BACKUPDIR="/opt/postgres-data" test -x $PGDIR || exit 1 export $PGOPTIONS >> /dev/null 2>&1 # status echo "=====================================" >> $TMPFILE 2>&1 echo "$DESC current status: " >> $TMPFILE 2>&1 /bin/su - $USER -c "$PGBIN/pg_ctl -D $PGDATA status" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 # vacuum echo "=====================================" >> $TMPFILE 2>&1 echo "$DESC vacuuming all databases: " >> $TMPFILE 2>&1 /bin/su - $USER -c "$PGBIN/vacuumdb --full --analyze --all" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 # index echo "=====================================" >> $TMPFILE 2>&1 echo "$DESC reindexing all databases: " >> $TMPFILE 2>&1 /bin/su - $USER -c "$PGBIN/reindexdb --all" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 # analyze # FIXME: C'est peut-être de trop avec le vacuum d'au-dessus... echo "=====================================" >> $TMPFILE 2>&1 echo "$DESC analyzing all databases: " >> $TMPFILE 2>&1 /bin/su - $USER -c "$PGBIN/vacuumdb --analyze --all" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 # backup echo "=====================================" >> $TMPFILE 2>&1 echo "$DESC backuping: " >> $TMPFILE 2>&1 /bin/mkdir -p $BACKUPDIR >> $TMPFILE 2>&1 /bin/su - $USER -c "$PGBIN/pg_dumpall > $BACKUPDIR/dumpall.sql" >> $TMPFILE 2>&1 /bin/su - $USER -c "/usr/bin/savelog -c 15 -p -j $BACKUPDIR/dumpall.sql" >> $TMPFILE 2>&1 echo "" >> $TMPFILE 2>&1 # mail recapitulatif if [ -s $TMPFILE ] then /bin/cat $TMPFILE | /usr/bin/mailx -a "From: $HOST " -s "$HOST : postgresql" admin@example.com -- fi /bin/rm -f $TMPFILE exit 0