Important directories:
/var/lib/postgresql/8.4/main /etc/postgresql/8.4/main
To dump a postgresql database you can use the “pg_dumpall” command which dumps ALL databases.
Example:
su - postgres -c "pg_dumpall > /path/to/backup/`hostname`.`date +%d.%m.%Y_%T`" su - postgres -c "pg_dumpall > /opt/portalu/backup/dumpall_`hostname`_`date +%a`"
Script:
#!/bin/bash #Variables BACKUPDIR="/backup" LOGFILE=${BACKUPDIR}/`date +%d.%m.%y`.log LOGERR=${BACKUPDIR}/ERROR_`date +%d.%m.%y`.log MAILADDR="test@test.de" HOST=`hostname` DUMPALL=dumpall_`hostname`_`date +%a` DATE=`date +%a` # IO redirection for logging. touch ${LOGFILE} exec 6>&1 # Link file descriptor #6 with stdout. # Saves stdout. exec > ${LOGFILE} # stdout replaced with file ${LOGFILE}. touch ${LOGERR} exec 7>&2 # Link file descriptor #7 with stderr. # Saves stderr. exec 2> ${LOGERR} # stderr replaced with file ${LOGERR}. # # Dumping global data (for example roles) pg_dumpall -U postgres -g > ${BACKUPDIR}/globals.sql pg_dumpall -U postgres > ${BACKUPDIR}/$DUMPALL.dump pg_dumpall -U postgres -l testdb > ${BACKUPDIR}/testdb.dump #Dumping indidual databases in tar (uncompressed binary) format for dbname in `psql -qXtc "select datname from pg_catalog.pg_database where datname<>'template0'" template1`; do pg_dump -U postgres -b "$dbname" > "${BACKUPDIR}/$dbname.dump" echo "$dbname" >> ${LOGFILE} done if [ -s "${LOGERR}" ] then cat "${LOGERR}" | mail -s "ERRORS REPORTED: Postgresql Backup error Log for ${HOST} - `date`" ${MAILADDR} else cat "${LOGFILE}" | mail -s "Postgresql Backup Log for ${HOST} - `date`" ${MAILADDR} fi cd ${BACKUPDIR}/ tar -pczf ${HOST}_${DATE}.tar.gz *.dump *.sql *.log rm *.log *.dump *.sql
This command will dump all db´s to a file like
hostname.date_hh:mm:ss
or
hostname.DAY_OF_WEEK
The following command shows all db´s:
psql -qXtc "select datname from pg_catalog.pg_database where datname<>'template0'" template1
or
psql -l
To restore a DB (created with “pg_dumpall”) you have:
dropdb database name; dropdb -U postgresql [Database] createdb --owner=db_owner --encoding=UTF-8 database_name
Afterwards you have to invoke:
psql -f dumpfile postgres #"postgres" is the owner of the db!
To create a DB as postgres:
createdb demo createdb -p 5000 -h eden -E LATIN1 -e demo #To create the database demo using the server on host eden, port 5000, using the LATIN1 encoding scheme createdb --owner=test --encoding=UTF-8 test
To create a DB as user test via psql:
psql -U test -d postgres -h localhost -c "CREATE DATABASE test OWNER test"
To create a DB within psql-shell:
CREATE DATABASE test OWNER test
To add role “CREATEDB” to user test:
ALTER USER test CREATEDB;
or
sudo -u postgres psql -c 'alter user test with createdb' postgres
\connect database #Use Database "database" \c database #Use Database "database" \du #List of roles/ attributes \l #List all databases \dt #Would return the list of all tables in the database you're connected to. SELECT * FROM table_name; #Replace "table_name" to a table listed by "\dt" and you get info sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';" #Set db-password for user postgres