forked from cloudnative-pg/cloudnative-pg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpostgres.go
70 lines (59 loc) · 2 KB
/
postgres.go
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
/*
Copyright The CloudNativePG Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package utils
import (
"strconv"
"strings"
"time"
corev1 "k8s.io/api/core/v1"
"github.com/cloudnative-pg/cloudnative-pg/pkg/specs"
)
const (
// PGLocalSocketDir is the directory containing the PostgreSQL local socket
PGLocalSocketDir = "/controller/run"
// AppUser for app user
AppUser = "app"
// PostgresUser for postgres user
PostgresUser = "postgres"
// AppDBName database name app
AppDBName = "app"
// PostgresDBName database name postgres
PostgresDBName = "postgres"
)
// RunQueryFromPod executes a query from a pod to a host
func RunQueryFromPod(
connectingPod *corev1.Pod,
host string,
dbname string,
user string,
password string,
query string,
env *TestingEnvironment,
) (string, string, error) {
timeout := time.Second * 10
dsn := CreateDSN(host, user, dbname, password, Prefer, 5432)
stdout, stderr, err := env.EventuallyExecCommand(env.Ctx, *connectingPod, specs.PostgresContainerName, &timeout,
"psql", dsn, "-tAc", query)
return stdout, stderr, err
}
// CountReplicas counts the number of replicas attached to an instance
func CountReplicas(env *TestingEnvironment, pod *corev1.Pod) (int, error) {
query := "SELECT count(*) FROM pg_stat_replication"
commandTimeout := time.Second * 10
stdOut, _, err := env.EventuallyExecCommand(env.Ctx, *pod, specs.PostgresContainerName,
&commandTimeout, "psql", "-U", "postgres", "app", "-tAc", query)
if err != nil {
return 0, nil
}
return strconv.Atoi(strings.Trim(stdOut, "\n"))
}