-
-
Notifications
You must be signed in to change notification settings - Fork 174
/
Copy pathpostgres_prestart.sh.j2
104 lines (87 loc) · 2.62 KB
/
postgres_prestart.sh.j2
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
#!/bin/bash
check_orioledb_enabled() {
local pg_conf="/etc/postgresql/postgresql.conf"
if [ ! -f "$pg_conf" ]; then
return 0
fi
grep "^shared_preload_libraries" "$pg_conf" | grep -c "orioledb" || return 0
}
get_shared_buffers() {
local opt_conf="/etc/postgresql-custom/generated-optimizations.conf"
if [ ! -f "$opt_conf" ]; then
return 0
fi
grep "^shared_buffers = " "$opt_conf" | cut -d "=" -f2 | tr -d ' ' || return 0
}
update_orioledb_buffers() {
local pg_conf="/etc/postgresql/postgresql.conf"
local value="$1"
if grep -q "^orioledb.main_buffers = " "$pg_conf"; then
sed -i "s/^orioledb.main_buffers = .*/orioledb.main_buffers = $value/" "$pg_conf"
else
echo "orioledb.main_buffers = $value" >> "$pg_conf"
fi
}
check_extensions_file() {
local extensions_file="/root/pg_extensions.json"
if [ ! -f "$extensions_file" ]; then
echo "extensions: No extensions file found, skipping extensions versions check"
return 1
fi
return 0
}
get_pg_cron_version() {
if ! check_extensions_file; then
return
fi
local version
version=$(sudo -u postgres /var/lib/postgresql/.nix-profile/bin/jq -r '.pg_cron // empty' "/root/pg_extensions.json")
if [ -z "$version" ]; then
echo "pg_cron: Not specified in extensions file"
return
fi
if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "pg_cron: Invalid version format: $version"
return
fi
echo "$version"
}
switch_pg_cron_version() {
local version="$1"
local switch_script="/var/lib/postgresql/.nix-profile/bin/switch_pg_cron_version"
if [ ! -x "$switch_script" ]; then
echo "pg_cron: No version switch script available"
return
fi
echo "pg_cron: Switching to version $version"
sudo -u postgres "$switch_script" "$version"
echo "pg_cron: Version switch completed"
}
handle_pg_cron_version() {
local version
version=$(get_pg_cron_version)
if [ -n "$version" ]; then
switch_pg_cron_version "$version"
fi
}
main() {
# 1. pg_cron version handling
handle_pg_cron_version
# 2. orioledb handling
local has_orioledb=$(check_orioledb_enabled)
if [ "$has_orioledb" -lt 1 ]; then
return 0
fi
local shared_buffers_value=$(get_shared_buffers)
if [ ! -z "$shared_buffers_value" ]; then
update_orioledb_buffers "$shared_buffers_value"
fi
}
# Initial locale setup
if [ $(cat /etc/locale.gen | grep -c en_US.UTF-8) -eq 0 ]; then
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
fi
if [ $(locale -a | grep -c en_US.utf8) -eq 0 ]; then
locale-gen
fi
main