File: uninstall_script

package info (click to toggle)
postgis 2.3.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 58,660 kB
  • ctags: 10,181
  • sloc: ansic: 132,858; sql: 131,148; xml: 46,460; sh: 4,832; perl: 4,476; makefile: 2,749; python: 1,198; yacc: 442; lex: 131
file content (128 lines) | stat: -rwxr-xr-x 2,778 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
# this script will change it's current working directory to utils

DB=postgis_uninstall

PGPATH=../postgis/
RTPATH=../raster/rt_pg/

PGFILE=uninstall_postgis.sql
RTFILE=uninstall_rtpostgis.sql

if [ "raster" == "$1" ]; then
	OUTFILE=$RTFILE
else
	OUTFILE=$PGFILE
fi
INFILE=$OUTFILE.in.$RANDOM
RAND1=$RANDOM
RAND2=$RANDOM

RTN=0

cleanup () {
	rm -f $INFILE $OUTFILE.$RAND1 $OUTFILE.$RAND2
}

# get reference uninstall of postgis.sql only
if [ "$1" == "raster" ]; then
	$0
fi

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

# use utils as our working directory
cd $DIR

# create database
createdb $DB

# load postgis.sql
psql -q -d $DB -f ${PGPATH}postgis.sql

# raster requested, load rtpostgis.sql
if [ "$1" == "raster" ]; then
	psql -q -d $DB -f ${RTPATH}rtpostgis.sql
fi

# dump database loaded with postgis.sql and rtpostgis.sql and strip for only one-line DROP and SET statements
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

# drop database
dropdb $DB

# first search_path is parsed
schema=`grep -m 1 "SET search_path = " < $INFILE | sed -e 's/SET search_path = //' -e 's/\(,\|;\)//g' -e 's/ /\n/'`

# sed arguments
sedarg="\-e 's/^DROP \(TABLE\|VIEW\|CAST\|OPERATOR CLASS\|OPERATOR\|AGGREGATE\|FUNCTION\|TYPE\)/& IF EXISTS/' "
for x in $schema; do
	sedarg="\-e 's/${x}.//g' "${sedarg}
done

# remove SET statements, remove schema names from DROP statements and add IF EXISTS for DROP statements
grep -v -E "^SET" < $INFILE | eval "sed ${sedarg}" > $OUTFILE.$RAND1
RTN=$?

if [ "$RTN" != "0" ]; then
	cleanup
	exit $RTN
fi

kw=""
OIFS=$IFS
IFS=$'\n'
echo -n '' > $OUTFILE.$RAND2
for x in `cat $OUTFILE.$RAND1`; do
	y=`echo "$x" | grep "CASCADE;\$"`
	# CASCADE found, get keyword
	if [ "x$y" != "x" ]; then
		kw=`echo "$x" | sed -e 's/^DROP TYPE IF EXISTS //' -e 's/ CASCADE;//'`
		echo "$x" >> $OUTFILE.$RAND2
		continue
	fi

	# no keyword, continue
	if [ "x$kw" == "x" ]; then
		echo "$x" >> $OUTFILE.$RAND2
		continue
	fi

	y=`echo "$x" | grep "($kw)"`
	if [ "x$y" == "x" ]; then
		echo "$x" >> $OUTFILE.$RAND2
		continue
	fi
done
IFS=$OIFS

# if raster, separate raster from postgis items
if [ "raster" == "$1" ]; then
	OIFS=$IFS
	IFS=$'\n'

	echo -n '' > ${RTPATH}$OUTFILE

	# see if line found in uninstall_postgis.sql
	for x in `cat $OUTFILE.$RAND2`; do
		y=`echo $x | sed -e 's/\(\[\|\]\)/\\\&/g'`
		y=`grep "^${y}$" < ${PGPATH}$PGFILE`

		# not postgis item
		if [ "x$y" == "x" ]; then
			echo $x >> ${RTPATH}${OUTFILE}
		fi
	done

	IFS=$OIFS
else
	mv $OUTFILE.$RAND2 ${PGPATH}${OUTFILE}
fi

# cleanup
cleanup

# return error
exit $RTN