| # lib/databases/postgresql | 
 | # Functions to control the configuration and operation of the **PostgreSQL** database backend | 
 |  | 
 | # Dependencies: | 
 | # DATABASE_{HOST,USER,PASSWORD} must be defined | 
 |  | 
 | # Save trace setting | 
 | PG_XTRACE=$(set +o | grep xtrace) | 
 | set +o xtrace | 
 |  | 
 | register_database postgresql | 
 |  | 
 | # Get rid of everything enough to cleanly change database backends | 
 | function cleanup_database_postgresql { | 
 |     stop_service postgresql | 
 |     if is_ubuntu; then | 
 |         # Get ruthless with mysql | 
 |         sudo aptitude purge -y  ~npostgresql | 
 |         return | 
 |     elif is_fedora; then | 
 |         uninstall_package postgresql-server | 
 |     else | 
 |         return | 
 |     fi | 
 | } | 
 |  | 
 | function recreate_database_postgresql { | 
 |     local db=$1 | 
 |     local charset=$2 | 
 |     # Avoid unsightly error when calling dropdb when the database doesn't exist | 
 |     psql -h$DATABASE_HOST -U$DATABASE_USER -dtemplate1 -c "DROP DATABASE IF EXISTS $db" | 
 |     createdb -h $DATABASE_HOST -U$DATABASE_USER -l C -T template0 -E $charset $db | 
 | } | 
 |  | 
 | function configure_database_postgresql { | 
 |     echo_summary "Configuring and starting PostgreSQL" | 
 |     if is_fedora; then | 
 |         PG_HBA=/var/lib/pgsql/data/pg_hba.conf | 
 |         PG_CONF=/var/lib/pgsql/data/postgresql.conf | 
 |         sudo [ -e $PG_HBA ] || sudo postgresql-setup initdb | 
 |     elif is_ubuntu; then | 
 |         PG_DIR=`find /etc/postgresql -name pg_hba.conf|xargs dirname` | 
 |         PG_HBA=$PG_DIR/pg_hba.conf | 
 |         PG_CONF=$PG_DIR/postgresql.conf | 
 |     elif is_suse; then | 
 |         PG_HBA=/var/lib/pgsql/data/pg_hba.conf | 
 |         PG_CONF=/var/lib/pgsql/data/postgresql.conf | 
 |         # initdb is called when postgresql is first started | 
 |         sudo [ -e $PG_HBA ] || start_service postgresql | 
 |     else | 
 |         exit_distro_not_supported "postgresql configuration" | 
 |     fi | 
 |     # Listen on all addresses | 
 |     sudo sed -i "/listen_addresses/s/.*/listen_addresses = '*'/" $PG_CONF | 
 |     # Do password auth from all IPv4 clients | 
 |     sudo sed -i "/^host/s/all\s\+127.0.0.1\/32\s\+ident/$DATABASE_USER\t0.0.0.0\/0\tpassword/" $PG_HBA | 
 |     # Do password auth for all IPv6 clients | 
 |     sudo sed -i "/^host/s/all\s\+::1\/128\s\+ident/$DATABASE_USER\t::0\/0\tpassword/" $PG_HBA | 
 |     restart_service postgresql | 
 |  | 
 |     # If creating the role fails, chances are it already existed. Try to alter it. | 
 |     sudo -u root sudo -u postgres -i psql -c "CREATE ROLE $DATABASE_USER WITH SUPERUSER LOGIN PASSWORD '$DATABASE_PASSWORD'" || \ | 
 |     sudo -u root sudo -u postgres -i psql -c "ALTER ROLE $DATABASE_USER WITH SUPERUSER LOGIN PASSWORD '$DATABASE_PASSWORD'" | 
 | } | 
 |  | 
 | function install_database_postgresql { | 
 |     echo_summary "Installing postgresql" | 
 |     PGPASS=$HOME/.pgpass | 
 |     if [[ ! -e $PGPASS ]]; then | 
 |         cat <<EOF > $PGPASS | 
 | *:*:*:$DATABASE_USER:$DATABASE_PASSWORD | 
 | EOF | 
 |         chmod 0600 $PGPASS | 
 |     else | 
 |         sed -i "s/:root:\w\+/:root:$DATABASE_PASSWORD/" $PGPASS | 
 |     fi | 
 |     if is_ubuntu; then | 
 |         install_package postgresql | 
 |     elif is_fedora || is_suse; then | 
 |         install_package postgresql-server | 
 |     else | 
 |         exit_distro_not_supported "postgresql installation" | 
 |     fi | 
 | } | 
 |  | 
 | function database_connection_url_postgresql { | 
 |     local db=$1 | 
 |     echo "$BASE_SQL_CONN/$db?client_encoding=utf8" | 
 | } | 
 |  | 
 | # Restore xtrace | 
 | $PG_XTRACE | 
 |  | 
 | # Local variables: | 
 | # mode: shell-script | 
 | # End: |