-
Notifications
You must be signed in to change notification settings - Fork 0
/
.bashrc
159 lines (146 loc) · 4.11 KB
/
.bashrc
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
### subroutines
set_pgenv_to_default(){
export PGDATABASE="postgres"
export PGHOST=""
export PGPORT="5432"
export PGUSER="postgres"
export PGCONF=""
export HBAFILE=""
export PGDATA=""
export CLUSTER=""
export CLUSTER_VERSION=""
export CLUSTER_NAME=""
export PGLOG=""
export V_RECOVERMODE="Unknown"
}
export -f set_pgenv_to_default
set_pgenv_to_givencluster(){
if [ "$#" -ne "2" ]; then
echo "Usage: set_pgenv_to_givencluster <version> <cluster_name>"
return 1
fi
local v_version="$1"
local v_clustername="$2"
local v_cname="${v_version}/${v_clustername}"
local v_flag=0
case "${v_cname}" in
"14/main" )
export PGPORT="5432"
v_flag=1
;;
"14/main_clone" )
export PGPORT="5433"
v_flag=1
;;
* ) echo "Unknown pg-cluster: ${v_cname}, env has not been changed;";;
esac
if [ "$v_flag" -eq "1" ]; then
PGCONF=$( psql -t -c "show config_file;" 2>/dev/null | tr -d [:cntrl:] | sed -r "s/^ +//" )
export PGCONF="$PGCONF"
HBAFILE=$( psql -t -c "show hba_file;" 2>/dev/null | tr -d [:cntrl:] | sed -r "s/^ +//" )
export HBAFILE="$HBAFILE"
PGDATA=$( psql -t -c "show data_directory;" 2>/dev/null | tr -d [:cntrl:] | sed -r "s/^ +//" )
export PGDATA="$PGDATA"
CLUSTER=$( psql -c "show cluster_name" -t --csv )
CLUSTER_VERSION=$( echo -n "$CLUSTER" | cut -f 1 -d "/" )
CLUSTER_NAME=$( echo -n "$CLUSTER" | cut -f 2 -d "/" )
PGLOG=$( pg_lsclusters -h | awk -v cv="$CLUSTER_VERSION" -v cn="$CLUSTER_NAME" '{ if ( ( $1 == cv ) && ( $2 == cn ) ) {printf "%s", $7;} }' )
if [ ! -f "$PGLOG" ]; then
echo "Can not find out log file of ${CLUSTER}"
PGLOG=""
fi
if [ ! -z "$PGCONF" ]; then
v_str=$( psql -tc "select pg_is_in_recovery();" | tr -d [:space:] | tr [:upper:] [:lower:] )
[ "$v_str" == "t" ] && V_RECOVERMODE="In_Recovery"
[ "$v_str" == "f" ] && V_RECOVERMODE="Not_in_recovery"
fi
if [ -f "$PGCONF" ]; then
alias epconf='vim "$PGCONF"'
alias show_pgconf='egrep "^[^#]\w+.*" $PGCONF | sort -k 1'
fi
if [ -f "$HBAFILE" ]; then
alias ehbafile='vim "$HBAFILE"'
fi
if [ -f "$PGLOG" ]; then
alias lesspglog='less "$PGLOG"'
fi
fi
}
restart_cluster(){
local v_cversion=${1:-"$CLUSTER_VERSION"}
local v_cname=${2:-"$CLUSTER_NAME"}
local v_delay=${3:-5}
local PG_HOST=${4:-"$PGHOST"}
local PG_PORT=${5:-"$PGPORT"}
echo "Trying to restart ${v_cversion} ${v_cname}, with delay between iteration: ${v_delay}"
pg_ctlcluster "$v_cversion" "$v_cname" stop
sleep 2
pg_ctlcluster "$v_cversion" "$v_cname" start
sleep 2
pg_isready -t 1 -q -h "$PG_HOST" -p "$PG_PORT"
rc="$?"
while [ "$rc" -ne "0" ]; do
echo "wait for cluster shutdowning"
sleep "$v_delay"
pg_ctlcluster "$v_cversion" "$v_cname" start
sleep 1
pg_isready -t 1 -q -h "$PG_HOST" -p "$PG_PORT"
rc="$?"
done
echo "cluster ${v_cversion} ${v_cname} restarted"
}
stop_cluster(){
if [ ! -z "$CLUSTER_VERSION" -a ! -z "$CLUSTER_NAME" ]; then
pg_ctlcluster "$CLUSTER_VERSION" "$CLUSTER_NAME" stop
else
echo "Can not stop <${CLUSTER_VERSION}> <${CLUSTER_NAME}>"
fi
}
start_cluster(){
local v_delay=5
if [ ! -z "$CLUSTER_VERSION" -a ! -z "$CLUSTER_NAME" ]; then
pg_ctlcluster "$CLUSTER_VERSION" "$CLUSTER_NAME" start
pg_isready -t 1 -q -h "$PG_HOST" -p "$PG_PORT"
rc="$?"
while [ "$rc" -ne "0" ]; do
sleep "$v_delay"
pg_isready -t 1 -q -h "$PG_HOST" -p "$PG_PORT"
rc="$?"
done
echo "$CLUSTER_VERSION $CLUSTER_NAME started"
else
echo "Can not start <${CLUSTER_VERSION}> <${CLUSTER_NAME}>"
fi
}
show_pgenv(){
cat << __EOF__ | column -t
PGDATABASE "$PGDATABASE"
PGHOST "$PGHOST"
PGPORT "$PGPORT"
PGUSER "$PGUSER"
PGCONF "$PGCONF"
HBAFILE "$HBAFILE"
PGDATA "$PGDATA"
CLUSTER "$CLUSTER"
CLUSTER_VERSION "$CLUSTER_VERSION"
CLUSTER_NAME "$CLUSTER_NAME"
PGLOG "$PGLOG"
V_RECOVERMODE "$V_RECOVERMODE"
__EOF__
}
export -f show_pgenv
set_pgcluster(){
if [ "$#" -ne "2" ]; then
echo "Usage: set_pgcluster <version> <cluster_name>"
return 1
fi
local v_version="$1"
local v_clustername="$2"
set_pgenv_to_givencluster "$v_version" "$v_clustername"
show_pgenv
}
export -f set_pgcluster
### main
cd
set_pgenv_to_default
pg_lsclusters