| 1 | #!/bin/bash |
|---|
| 2 | |
|---|
| 3 | DB=postgis_uninstall |
|---|
| 4 | |
|---|
| 5 | PGFILE=uninstall_postgis.sql |
|---|
| 6 | RTFILE=uninstall_rtpostgis.sql |
|---|
| 7 | |
|---|
| 8 | if [ "raster" == "$1" ]; then |
|---|
| 9 | OUTFILE=$RTFILE |
|---|
| 10 | else |
|---|
| 11 | OUTFILE=$PGFILE |
|---|
| 12 | fi |
|---|
| 13 | INFILE=$OUTFILE.in.$RANDOM |
|---|
| 14 | RAND=$RANDOM |
|---|
| 15 | |
|---|
| 16 | RTN=0 |
|---|
| 17 | |
|---|
| 18 | cleanup () { |
|---|
| 19 | rm -f $INFILE $OUTFILE.$RAND |
|---|
| 20 | } |
|---|
| 21 | |
|---|
| 22 | # get reference uninstall of postgis.sql only |
|---|
| 23 | if [ "$1" == "raster" ]; then |
|---|
| 24 | $0 |
|---|
| 25 | fi |
|---|
| 26 | |
|---|
| 27 | # create database |
|---|
| 28 | createdb $DB |
|---|
| 29 | |
|---|
| 30 | # load postgis.sql |
|---|
| 31 | psql -q -d $DB -f ../../postgis/postgis.sql |
|---|
| 32 | |
|---|
| 33 | # raster requested, load rtpostgis.sql |
|---|
| 34 | if [ "$1" == "raster" ]; then |
|---|
| 35 | psql -q -d $DB -f rtpostgis.sql |
|---|
| 36 | fi |
|---|
| 37 | |
|---|
| 38 | # dump database loaded with postgis.sql and rtpostgis.sql and strip for only one-line DROP and SET statements |
|---|
| 39 | pg_dump --format=p --clean --schema-only --no-owner --no-acl --no-tablespaces $DB | grep -E "^(DROP|SET).*;$" | grep -v -E "^DROP (SCHEMA|PROCEDURAL) .*;$" > $INFILE |
|---|
| 40 | |
|---|
| 41 | # drop database |
|---|
| 42 | dropdb $DB |
|---|
| 43 | |
|---|
| 44 | # first search_path is parsed |
|---|
| 45 | schema=`grep -m 1 "SET search_path = " < $INFILE | sed -e 's/SET search_path = //' -e 's/\(,\|;\)//g' -e 's/ /\n/'` |
|---|
| 46 | |
|---|
| 47 | # sed arguments |
|---|
| 48 | sedarg="\-e 's/^DROP \(TABLE\|VIEW\|CAST\|OPERATOR CLASS\|OPERATOR\|AGGREGATE\|FUNCTION\|TYPE\)/& IF EXISTS/' " |
|---|
| 49 | for x in $schema; do |
|---|
| 50 | sedarg="\-e 's/${x}.//g' "${sedarg} |
|---|
| 51 | done |
|---|
| 52 | |
|---|
| 53 | # remove SET statements, remove schema names from DROP statements and add IF EXISTS for DROP statements |
|---|
| 54 | grep -v -E "^SET" < $INFILE | eval "sed ${sedarg}" > $OUTFILE.$RAND |
|---|
| 55 | RTN=$? |
|---|
| 56 | |
|---|
| 57 | if [ "$RTN" != "0" ]; then |
|---|
| 58 | cleanup |
|---|
| 59 | exit $RTN |
|---|
| 60 | fi |
|---|
| 61 | |
|---|
| 62 | # if raster, separate raster from postgis items |
|---|
| 63 | if [ "raster" == "$1" ]; then |
|---|
| 64 | OIFS=$IFS |
|---|
| 65 | IFS=$'\n' |
|---|
| 66 | |
|---|
| 67 | echo -n '' > $OUTFILE |
|---|
| 68 | |
|---|
| 69 | # see if line found in uninstall_postgis.sql |
|---|
| 70 | for x in `cat $OUTFILE.$RAND`; do |
|---|
| 71 | y=`echo $x | sed -e 's/\(\[\|\]\)/\\\&/g'` |
|---|
| 72 | y=`grep "^${y}$" < $PGFILE` |
|---|
| 73 | |
|---|
| 74 | # not postgis item |
|---|
| 75 | if [ "x$y" == "x" ]; then |
|---|
| 76 | echo $x >> $OUTFILE |
|---|
| 77 | fi |
|---|
| 78 | done |
|---|
| 79 | |
|---|
| 80 | IFS=$OIFS |
|---|
| 81 | else |
|---|
| 82 | mv $OUTFILE.$RAND $OUTFILE |
|---|
| 83 | fi |
|---|
| 84 | |
|---|
| 85 | # cleanup |
|---|
| 86 | cleanup |
|---|
| 87 | |
|---|
| 88 | # return error |
|---|
| 89 | exit $RTN |
|---|