lib/databases/postgresql
6d04fd7b
 # lib/databases/postgresql
 # Functions to control the configuration and operation of the **PostgreSQL** database backend
428af5a2
 
 # Dependencies:
 # DATABASE_{HOST,USER,PASSWORD} must be defined
 
 # Save trace setting
41bf4520
 PG_XTRACE=$(set +o | grep xtrace)
428af5a2
 set +o xtrace
 
 register_database postgresql
 
995eb927
 # 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
 }
 
428af5a2
 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"
b1b04d06
     if is_fedora; then
428af5a2
         PG_HBA=/var/lib/pgsql/data/pg_hba.conf
         PG_CONF=/var/lib/pgsql/data/postgresql.conf
adfc7a3c
         sudo [ -e $PG_HBA ] || sudo postgresql-setup initdb
b1b04d06
     elif is_ubuntu; then
428af5a2
         PG_DIR=`find /etc/postgresql -name pg_hba.conf|xargs dirname`
         PG_HBA=$PG_DIR/pg_hba.conf
         PG_CONF=$PG_DIR/postgresql.conf
b1b04d06
     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"
428af5a2
     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
b1b04d06
     restart_service postgresql
428af5a2
 
     # If creating the role fails, chances are it already existed. Try to alter it.
c1b486a5
     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'"
428af5a2
 }
 
 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
00011c08
     if is_ubuntu; then
         install_package postgresql
     elif is_fedora || is_suse; then
428af5a2
         install_package postgresql-server
     else
00011c08
         exit_distro_not_supported "postgresql installation"
428af5a2
     fi
 }
 
 function database_connection_url_postgresql {
7e79d913
     local db=$1
     echo "$BASE_SQL_CONN/$db?client_encoding=utf8"
428af5a2
 }
 
 # Restore xtrace
41bf4520
 $PG_XTRACE
584d90ec
 
 # Local variables:
 # mode: shell-script
 # End: