mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-19 14:56:46 +02:00
168 lines
4.3 KiB
Bash
168 lines
4.3 KiB
Bash
#!/bin/sh
|
|
|
|
DB=webproxylog
|
|
DBUSER=weblogowner
|
|
|
|
psql_args="$@"
|
|
|
|
runsql() {
|
|
local cmd="$1"
|
|
shift
|
|
psql -U $DBUSER --dbname=$DB --no-align --tuples-only -c "$cmd" $psql_args
|
|
}
|
|
|
|
# check if table exists or not
|
|
# based on http://www.peterbe.com/plog/pg_class/
|
|
has_table() {
|
|
local tbl="$1"
|
|
local res=$(runsql "
|
|
SELECT count(relname) FROM pg_class
|
|
WHERE relname = '$tbl'")
|
|
test $res -ge 1
|
|
}
|
|
|
|
# test if column exist in given table
|
|
# based on http://www.tequilafish.com/2007/02/23/postgresql-determine-if-a-column-exists-or-not/
|
|
has_column() {
|
|
local tbl=$1 col=$2
|
|
local res=$(runsql "
|
|
SELECT count(attname) FROM pg_attribute
|
|
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = '$tbl')
|
|
AND attname = '$col';")
|
|
test $res -ge 1
|
|
}
|
|
|
|
# add column if its missing
|
|
check_column() {
|
|
local tbl="$1" col="$2" datatype="$3"
|
|
echo -n "Checking column '$col' in table '$tbl' ... "
|
|
if has_column "$tbl" "$col"; then
|
|
echo "Ok"
|
|
else
|
|
runsql "ALTER TABLE $tbl ADD COLUMN $col $datatype"
|
|
fi
|
|
}
|
|
|
|
# get data type for column
|
|
# based on http://stackoverflow.com/questions/2146705/select-datatype-of-the-field-in-postgres
|
|
get_data_type() {
|
|
local tbl="$1" col="$2"
|
|
runsql "SELECT data_type FROM information_schema.columns
|
|
WHERE table_name = '$tbl' AND column_name = '$col'"
|
|
}
|
|
|
|
# get data precision for column
|
|
get_data_precision() {
|
|
local tbl="$1" col="$2" datatype="$3"
|
|
runsql "SELECT ${datatype}_precision FROM information_schema.columns
|
|
WHERE table_name = '$tbl' AND column_name = '$col'"
|
|
}
|
|
|
|
|
|
check_column_timestamp() {
|
|
local tbl="$1" col="$2"
|
|
local precision=3
|
|
echo -n "Checking column '$col' in table '$tbl' ... "
|
|
if [ "$(get_data_type $tbl $col)" = "timestamp without time zone" ] \
|
|
&& [ "$(get_data_precision $tbl $col datetime)" = "$precision" ]; then
|
|
echo "Ok"
|
|
else
|
|
runsql "ALTER TABLE $tbl ALTER $col
|
|
TYPE timestamp($precision) without time zone"
|
|
fi
|
|
}
|
|
|
|
check_column_type() {
|
|
local tbl="$1" col="$2" datatype="$3"
|
|
echo -n "Checking column '$col' in table '$tbl' ... "
|
|
if [ "$(get_data_type $tbl $col)" = "$datatype" ]; then
|
|
echo "Ok"
|
|
else
|
|
runsql "ALTER TABLE $tbl ALTER $col TYPE $datatype"
|
|
fi
|
|
}
|
|
|
|
drop_table() {
|
|
local tbl="$1"
|
|
echo -n "Dropping table '$tbl' ... "
|
|
runsql "DROP TABLE $tbl"
|
|
}
|
|
|
|
# for older than 0.4.0
|
|
check_column weblog shortreason text
|
|
check_column pubweblog shortreason text
|
|
check_column pubblocklog shortreason text
|
|
check_column blocklog shortreason text
|
|
|
|
# for older than 0.4.5
|
|
check_column_timestamp dbhistlog logdatetime
|
|
|
|
# for older than 0.5.4
|
|
check_column_type weblog bytes bigint
|
|
check_column_type pubweblog bytes bigint
|
|
check_column_type blocklog bytes bigint
|
|
check_column_type pubblocklog bytes bigint
|
|
|
|
# for older than 0.6.0
|
|
check_column pubweblog badyesno int
|
|
check_column pubweblog deniedyesno int
|
|
check_column pubweblog bypassyesno int
|
|
check_column pubweblog wordloc text
|
|
check_column pubweblog goodwordloc text
|
|
check_column pubweblog selected boolean
|
|
check_column pubweblog id "SERIAL PRIMARY KEY"
|
|
|
|
if has_table pubblocklog; then
|
|
echo -n "Importing pubblocklog ... "
|
|
runsql "INSERT INTO pubweblog SELECT *,'0','1','0','','','false'
|
|
FROM pubblocklog"
|
|
drop_table "pubblocklog"
|
|
fi
|
|
|
|
if has_table blocklog; then
|
|
echo -n "Importing blocklog ... "
|
|
runsql "INSERT INTO pubweblog SELECT *,'0','1','0','','','false'
|
|
FROM blocklog"
|
|
drop_table blocklog
|
|
fi
|
|
|
|
# we dont import this
|
|
if has_table watchlist; then
|
|
drop_table watchlist
|
|
fi
|
|
|
|
if ! has_column weblog badyesno; then
|
|
echo -n "Importing weblog ..."
|
|
runsql "INSERT INTO pubweblog SELECT *,'0','0','0','','','false'
|
|
FROM weblog"
|
|
fi
|
|
check_column weblog badyesno int
|
|
check_column weblog deniedyesno int
|
|
check_column weblog bypassyesno int
|
|
check_column weblog wordloc text
|
|
check_column weblog goodwordloc text
|
|
|
|
if ! has_table pubweblog_history; then
|
|
echo -n "Creating table 'pubweblog_history' ... "
|
|
runsql "
|
|
CREATE TABLE pubweblog_history(
|
|
sourcename character varying(40),
|
|
clientip inet NOT NULL,
|
|
clientuserid character varying(64) NOT NULL,
|
|
logdatetime timestamp(3) without time zone NOT NULL,
|
|
uri text NOT NULL,
|
|
bytes bigint NOT NULL,
|
|
reason text,
|
|
score integer,
|
|
shortreason text,
|
|
badyesno int,
|
|
deniedyesno int,
|
|
bypassyesno int,
|
|
wordloc text,
|
|
goodwordloc text,
|
|
selected boolean,
|
|
id int)"
|
|
echo -n "Setting permissions on pubweblog_history ... "
|
|
runsql "GRANT SELECT ON pubweblog_history TO webloguser"
|
|
fi
|
|
|