From 73c856222edb8c22377bf9a1c81a724065e3a31c Mon Sep 17 00:00:00 2001 From: Palle Girgensohn Date: Mon, 18 Apr 2011 23:34:27 +0000 Subject: Update PostgreSQL to 9.0.4, 8.4.8, 8.3.15 and 8.2.21. This update contains a critical fix to the pg_upgrade utility which prevents significant downtime issues. Do not use pg_upgrade without installing this update first. The issue with pg_upgrade and the fix are detailed on the PostgreSQL wiki: http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix Users who have already used pg_upgrade should run the database repair script given on that page on their databases as soon as possible. See the release notes for each version at http://www.postgresql.org/docs/current/static/release.html for a full list of changes with details. Allow the username of the postgresql user to configurable for 8.4 and 9.0. Largely inspired by the work of Jason Helfman [153668, 153136]. Change PGUSER knob to PG_USER not to clash with PGUSER environment. PR: 153668, 153136, 155493, 155137 --- databases/postgresql91-server/files/502.pgsql | 112 --------------------- databases/postgresql91-server/files/502.pgsql.in | 112 +++++++++++++++++++++ .../files/pkg-install-server.in | 66 ++++++++++++ .../files/pkg-message-client.in | 2 +- databases/postgresql91-server/files/postgresql.in | 2 +- 5 files changed, 180 insertions(+), 114 deletions(-) delete mode 100644 databases/postgresql91-server/files/502.pgsql create mode 100644 databases/postgresql91-server/files/502.pgsql.in create mode 100644 databases/postgresql91-server/files/pkg-install-server.in (limited to 'databases/postgresql91-server/files') diff --git a/databases/postgresql91-server/files/502.pgsql b/databases/postgresql91-server/files/502.pgsql deleted file mode 100644 index 281189a59c46..000000000000 --- a/databases/postgresql91-server/files/502.pgsql +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Maintenance shell script to vacuum and backup database -# Put this in /usr/local/etc/periodic/daily, and it will be run -# every night -# -# Written by Palle Girgensohn -# -# In public domain, do what you like with it, -# and use it at your own risk... :) -# - -# Define these variables in either /etc/periodic.conf or -# /etc/periodic.conf.local to override the default values. -# -# daily_pgsql_backup_enable="YES" # do backup of all databases -# daily_pgsql_backup_enable="foo bar db1 db2" # only do backup of a limited selection of databases -# daily_pgsql_vacuum_enable="YES" # do vacuum - -daily_pgsql_vacuum_args="-z" -daily_pgsql_pgdump_args="-b -F c" -# backupdir is relative to ~pgsql home directory unless it begins with a slash: -daily_pgsql_backupdir="~pgsql/backups" -daily_pgsql_savedays="7" - -# If there is a global system configuration file, suck it in. -# -if [ -r /etc/defaults/periodic.conf ] -then - . /etc/defaults/periodic.conf - source_periodic_confs -fi - -# allow '~´ in dir name -eval backupdir=${daily_pgsql_backupdir} - -rc=0 - -pgsql_backup() { - # daily_pgsql_backupdir must be writeable by user pgsql - # ~pgsql is just that under normal circumstances, - # but this might not be where you want the backups... - if [ ! -d ${backupdir} ] ; then - echo Creating ${backupdir} - mkdir -m 700 ${backupdir}; chown pgsql ${backupdir} - fi - - echo - echo "PostgreSQL backups" - - # Protect the data - umask 077 - rc=$? - now=`date "+%Y-%m-%dT%H:%M:%S"` - file=${daily_pgsql_backupdir}/pgglobals_${now} - su -l pgsql -c "umask 077; pg_dumpall -g | gzip -9 > ${file}.gz" - - db=$1 - while shift; do - echo -n " $db" - file=${backupdir}/pgdump_${db}_${now} - su -l pgsql -c "umask 077; pg_dump ${daily_pgsql_pgdump_args} -f ${file} ${db}" - [ $? -gt 0 ] && rc=3 - db=$1 - done - - if [ $rc -gt 0 ]; then - echo - echo "Errors were reported during backup." - fi - - # cleaning up old data - find ${backupdir} \( -name 'pgdump_*' -o -name 'pgglobals_*' \) \ - -a -mtime +${daily_pgsql_savedays} -delete - echo -} - -case "$daily_pgsql_backup_enable" in - [Yy][Ee][Ss]) - dbnames=`su -l pgsql -c "umask 077; psql -q -t -A -d template1 -c SELECT\ datname\ FROM\ pg_database\ WHERE\ datname!=\'template0\'"` - pgsql_backup $dbnames - ;; - - [Nn][Oo]) - ;; - - "") - ;; - - *) - pgsql_backup $daily_pgsql_backup_enable - ;; -esac - -case "$daily_pgsql_vacuum_enable" in - [Yy][Ee][Ss]) - - echo - echo "PostgreSQL vacuum" - su -l pgsql -c "vacuumdb -a -q ${daily_pgsql_vacuum_args}" - if [ $? -gt 0 ] - then - echo - echo "Errors were reported during vacuum." - rc=3 - fi - ;; -esac - -exit $rc diff --git a/databases/postgresql91-server/files/502.pgsql.in b/databases/postgresql91-server/files/502.pgsql.in new file mode 100644 index 000000000000..266a822efb61 --- /dev/null +++ b/databases/postgresql91-server/files/502.pgsql.in @@ -0,0 +1,112 @@ +%%PG_USER%%#!/bin/sh +# +# $FreeBSD: /tmp/pcvs/ports/databases/postgresql91-server/files/502.pgsql.in,v 1.1 2011-04-18 23:34:27 girgen Exp $ +# +# Maintenance shell script to vacuum and backup database +# Put this in /usr/local/etc/periodic/daily, and it will be run +# every night +# +# Written by Palle Girgensohn +# +# In public domain, do what you like with it, +# and use it at your own risk... :) +# + +# Define these variables in either /etc/periodic.conf or +# /etc/periodic.conf.local to override the default values. +# +# daily_pgsql_backup_enable="YES" # do backup of all databases +# daily_pgsql_backup_enable="foo bar db1 db2" # only do backup of a limited selection of databases +# daily_pgsql_vacuum_enable="YES" # do vacuum + +daily_pgsql_vacuum_args="-z" +daily_pgsql_pgdump_args="-b -F c" +# backupdir is relative to ~pgsql home directory unless it begins with a slash: +daily_pgsql_backupdir="~%%PG_USER%%/backups" +daily_pgsql_savedays="7" + +# If there is a global system configuration file, suck it in. +# +if [ -r /etc/defaults/periodic.conf ] +then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + +# allow '~´ in dir name +eval backupdir=${daily_pgsql_backupdir} + +rc=0 + +pgsql_backup() { + # daily_pgsql_backupdir must be writeable by user %%PG_USER%% + # ~%%PG_USER%% is just that under normal circumstances, + # but this might not be where you want the backups... + if [ ! -d ${backupdir} ] ; then + echo Creating ${backupdir} + mkdir -m 700 ${backupdir}; chown %%PG_USER%% ${backupdir} + fi + + echo + echo "PostgreSQL backups" + + # Protect the data + umask 077 + rc=$? + now=`date "+%Y-%m-%dT%H:%M:%S"` + file=${daily_pgsql_backupdir}/pgglobals_${now} + su -l %%PG_USER%% -c "umask 077; pg_dumpall -g -U %%PG_USER%% | gzip -9 > ${file}.gz" + + db=$1 + while shift; do + echo -n " $db" + file=${backupdir}/pgdump_${db}_${now} + su -l %%PG_USER%% -c "umask 077; pg_dump ${daily_pgsql_pgdump_args} -U %%PG_USER%% -f ${file} ${db}" + [ $? -gt 0 ] && rc=3 + db=$1 + done + + if [ $rc -gt 0 ]; then + echo + echo "Errors were reported during backup." + fi + + # cleaning up old data + find ${backupdir} \( -name 'pgdump_*' -o -name 'pgglobals_*' \) \ + -a -mtime +${daily_pgsql_savedays} -delete + echo +} + +case "$daily_pgsql_backup_enable" in + [Yy][Ee][Ss]) + dbnames=`su -l %%PG_USER%% -c "umask 077; psql -q -t -A -d template1 -U %%PG_USER%% -c SELECT\ datname\ FROM\ pg_database\ WHERE\ datname!=\'template0\'"` + pgsql_backup $dbnames + ;; + + [Nn][Oo]) + ;; + + "") + ;; + + *) + pgsql_backup $daily_pgsql_backup_enable + ;; +esac + +case "$daily_pgsql_vacuum_enable" in + [Yy][Ee][Ss]) + + echo + echo "PostgreSQL vacuum" + su -l %%PG_USER%% -c "vacuumdb -a -q -U %%PG_USER%% ${daily_pgsql_vacuum_args}" + if [ $? -gt 0 ] + then + echo + echo "Errors were reported during vacuum." + rc=3 + fi + ;; +esac + +exit $rc diff --git a/databases/postgresql91-server/files/pkg-install-server.in b/databases/postgresql91-server/files/pkg-install-server.in new file mode 100644 index 000000000000..efa9b14c2788 --- /dev/null +++ b/databases/postgresql91-server/files/pkg-install-server.in @@ -0,0 +1,66 @@ +#! /bin/sh + +# $FreeBSD: /tmp/pcvs/ports/databases/postgresql91-server/files/Attic/pkg-install-server.in,v 1.1 2011-04-18 23:34:27 girgen Exp $ + +PATH=/bin:/usr/bin:/usr/sbin +PG_USER=%%PG_USER%% +PG_GROUP=%%PG_GROUP%% +PG_UID=%%PG_UID%% + +backupwarning() { echo " + + =========== BACKUP YOUR DATA! ============= + As always, backup your data before + upgrading. If the upgrade leads to a higher + minor revision (e.g. 7.3.x -> 7.4), a dump + and restore of all databases is + required. This is *NOT* done by the port! + + Press ctrl-C *now* if you need to pg_dump. + =========================================== +" + sleep 5 +} + +case $2 in +PRE-INSTALL) + backupwarning + PGUSER=${PGUSER:-${PG_USER}} + PGGROUP=${PGGROUP:-${PG_GROUP}} + DB_DIR=${PKG_PREFIX}/${PGUSER} + UID=${PG_UID} + GID=${PG_UID} + + if pw group show "${PGGROUP}" 2>/dev/null; then + echo "You already have a group \"${PGGROUP}\", so I will use it." + else + if pw groupadd ${PGGROUP} -g ${GID}; then + echo "Added group \"${PGGROUP}\"." + else + echo "Adding group \"${PGGROUP}\" failed..." + exit 1 + fi + fi + + if pw user show "${PGUSER}" 2>/dev/null; then + echo "You already have a user \"${PGUSER}\", so I will use it." + else + if pw useradd ${PGUSER} -u ${UID} -g ${PGGROUP} -h - \ + -d ${DB_DIR} -c "PostgreSQL Daemon" + then + echo "Added user \"${PGUSER}\"." + else + echo "Adding user \"${PGUSER}\" failed..." + exit 1 + fi + fi + + if ! [ -x ~${PGUSER} ] ; then + install -m 755 -o ${PGUSER} -g ${PGGROUP} -d ${DB_DIR} + fi + ;; + +BACKUPWARNING) + backupwarning + ;; +esac diff --git a/databases/postgresql91-server/files/pkg-message-client.in b/databases/postgresql91-server/files/pkg-message-client.in index 3183bc136aa6..ff486a635645 100644 --- a/databases/postgresql91-server/files/pkg-message-client.in +++ b/databases/postgresql91-server/files/pkg-message-client.in @@ -1,6 +1,6 @@ The PostgreSQL port has a collection of "side orders": -postgresql-doc +postgresql-docs For all of the html documentation p5-Pg diff --git a/databases/postgresql91-server/files/postgresql.in b/databases/postgresql91-server/files/postgresql.in index 405d2efaa4d3..d1e3c763f8da 100644 --- a/databases/postgresql91-server/files/postgresql.in +++ b/databases/postgresql91-server/files/postgresql.in @@ -32,7 +32,7 @@ load_rc_config postgresql # set defaults postgresql_enable=${postgresql_enable:-"NO"} postgresql_flags=${postgresql_flags:-"-w -s -m fast"} -postgresql_user=pgsql +postgresql_user=${postgresql_user:-"%%PG_USER%%"} eval postgresql_data=${postgresql_data:-"~${postgresql_user}/data"} postgresql_class=${postgresql_class:-"default"} postgresql_initdb_flags=${postgresql_initdb_flags:-"--encoding=utf-8 --lc-collate=C"} -- cgit v1.2.3