Ticket #301: uninstall_script

File uninstall_script, 1.8 KB (added by dustymugs, 5 months ago)

Bash script to generate uninstall.sql files. Really rough at the moment.

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