Skip to content

Add pgvector extension test #1205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jul 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e-tests/run-minikube.csv
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ custom-tls
demand-backup
finalizers
init-deploy
pgvector-extension
one-pod
operator-self-healing
scaling
Expand Down
1 change: 1 addition & 0 deletions e2e-tests/run-pr.csv
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ monitoring
monitoring-pmm3
one-pod
operator-self-healing
pgvector-extension
pitr
scaling
scheduled-backup
Expand Down
1 change: 1 addition & 0 deletions e2e-tests/run-release.csv
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ monitoring
monitoring-pmm3
one-pod
operator-self-healing
pgvector-extension
pitr
scaling
scheduled-backup
Expand Down
24 changes: 24 additions & 0 deletions e2e-tests/tests/pgvector-extension/00-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 120
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: perconapgclusters.pgv2.percona.com
spec:
group: pgv2.percona.com
names:
kind: PerconaPGCluster
listKind: PerconaPGClusterList
plural: perconapgclusters
singular: perconapgcluster
scope: Namespaced
---
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
metadata:
name: check-operator-deploy-status
timeout: 120
commands:
- script: kubectl assert exist-enhanced deployment percona-postgresql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1
13 changes: 13 additions & 0 deletions e2e-tests/tests/pgvector-extension/00-deploy-operator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions
init_temp_dir # do this only in the first TestStep

deploy_operator
deploy_client
88 changes: 88 additions & 0 deletions e2e-tests/tests/pgvector-extension/01-assert.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
apiVersion: kuttl.dev/v1beta1
kind: TestAssert
timeout: 300
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
postgres-operator.crunchydata.com/cluster: pgvector-extension
postgres-operator.crunchydata.com/data: postgres
postgres-operator.crunchydata.com/instance-set: instance1
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: pgvector-extension
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 1
readyReplicas: 1
updatedReplicas: 1
collisionCount: 0
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: pgvector-extension-pgbouncer
labels:
postgres-operator.crunchydata.com/cluster: pgvector-extension
postgres-operator.crunchydata.com/role: pgbouncer
annotations:
deployment.kubernetes.io/revision: '1'
ownerReferences:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: pgvector-extension
controller: true
blockOwnerDeletion: true
status:
observedGeneration: 1
replicas: 3
updatedReplicas: 3
readyReplicas: 3
---
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: pgvector-extension
ownerReferences:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
name: pgvector-extension
controller: true
blockOwnerDeletion: true
finalizers:
- postgres-operator.crunchydata.com/finalizer
spec:
backups:
pgbackrest: {}
status:
instances:
- name: instance1
readyReplicas: 3
replicas: 3
updatedReplicas: 3
observedGeneration: 1
proxy:
pgBouncer:
readyReplicas: 3
replicas: 3
---
apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: pgvector-extension
status:
pgbouncer:
ready: 3
size: 3
postgres:
instances:
- name: instance1
ready: 3
size: 3
ready: 3
size: 3
state: ready
12 changes: 12 additions & 0 deletions e2e-tests/tests/pgvector-extension/01-create-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

get_cr "pgvector-extension" ${RANDOM} \
| kubectl -n "${NAMESPACE}" apply -f -
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

result=$(run_psql_local \
"SELECT * FROM pg_extension WHERE extname = '\''vector'\'';" \
"postgres:$(get_psql_user_pass pgvector-extension-pguser-postgres)@$(get_psql_user_host pgvector-extension-pguser-postgres)/postgres")

if [[ "$result" = *"vector"* ]]; then
echo "pgvector extension is not disabled by default"
exit 1
fi
timeout: 360
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

get_cr "pgvector-extension" ${RANDOM} \
| yq '.spec.extensions.builtin.pgvector=true' \
| kubectl -n "${NAMESPACE}" apply -f -
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

retries=10
wait_seconds=5

for i in $(seq 1 $retries); do

result=$(run_psql_local \
"SELECT * FROM pg_extension WHERE extname = '\''vector'\'';" \
"postgres:$(get_psql_user_pass pgvector-extension-pguser-postgres)@$(get_psql_user_host pgvector-extension-pguser-postgres)/postgres")

if [[ "$result" = *"vector"* ]]; then
echo "pgvector extension is enabled, verifying extension"
run_psql_local \
"SELECT '\''[1,2,3]'\''::vector <-> '\''[3,2,1]'\''::vector;" \
"postgres:$(get_psql_user_pass pgvector-extension-pguser-postgres)@$(get_psql_user_host pgvector-extension-pguser-postgres)/postgres"

exit 0
fi

echo "pgvector extension not enabled, retrying in $wait_seconds seconds..."
sleep $wait_seconds
done

echo "pgvector extension is not properly enabled"
exit 1
timeout: 360
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
timeout: 10
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

get_cr "pgvector-extension" ${RANDOM} \
| yq '.spec.extensions.builtin.pgvector=false' \
| kubectl -n "${NAMESPACE}" apply -f -
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

retries=10
wait_seconds=5

for i in $(seq 1 $retries); do
result=$(run_psql_local \
"SELECT * FROM pg_extension WHERE extname = '\''vector'\'';" \
"postgres:$(get_psql_user_pass pgvector-extension-pguser-postgres)@$(get_psql_user_host pgvector-extension-pguser-postgres)/postgres")

if [[ "$result" != *"vector"* ]]; then
echo "pgvector extension is disabled"
exit 0
fi

echo "pgvector extension still present, retrying in $wait_seconds seconds..."
sleep $wait_seconds
done

echo "pgvector extension was not properly disabled"
exit 1
timeout: 360
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: kuttl.dev/v1beta1
kind: TestStep
delete:
- apiVersion: pgv2.percona.com/v2
kind: PerconaPGCluster
metadata:
name: pgvector-extension
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: pgvector-extension
commands:
- script: |-
set -o errexit
set -o xtrace

source ../../functions

remove_all_finalizers
destroy_operator
timeout: 60
Loading