Skip to content

Commit ae18b9a

Browse files
Merge pull request #152 from mindsdb/add/pgvector
Add pgvector as default KB store
2 parents c337389 + 3fab909 commit ae18b9a

4 files changed

Lines changed: 110 additions & 5 deletions

File tree

Dockerfile.pgvector

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM pgvector/pgvector:pg17
2+
3+
COPY init-dbs.sh /docker-entrypoint-initdb.d/init-dbs.sh
4+
RUN chmod +x /docker-entrypoint-initdb.d/init-dbs.sh
5+

Makefile

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
IMAGE?=mindsdb/mindsdb-docker-extension
2+
PGVECTOR_IMAGE?=mindsdb/mindsdb-docker-extension-pgvector
23

34
BUILDER=buildx-multi-arch
45

56
INFO_COLOR = \033[0;36m
67
NO_COLOR = \033[m
78

8-
build-extension: ## Build service image to be deployed as a desktop extension
9+
build-pgvector: ## Build the pgvector image with init scripts
10+
docker build --tag=$(PGVECTOR_IMAGE):latest -f Dockerfile.pgvector .
11+
12+
build-extension: build-pgvector ## Build service image to be deployed as a desktop extension
913
docker build --tag=$(IMAGE):$(TAG) .
1014

1115
install-extension: build-extension ## Install the extension
@@ -20,7 +24,10 @@ prepare-buildx: ## Create buildx builder for multi-arch build, if not exists
2024
validate-extension: ## Validate extension is ready to be published
2125
docker extension validate mindsdb/mindsdb-docker-extension:1.0.0
2226

23-
push-extension: prepare-buildx ## Build & Upload extension image to hub. Do not push if tag already exists: make push-extension tag=0.1
27+
push-pgvector: prepare-buildx ## Build & Upload pgvector image to hub
28+
docker buildx build --push --builder=$(BUILDER) --platform=linux/amd64,linux/arm64 --tag=$(PGVECTOR_IMAGE):latest -f Dockerfile.pgvector .
29+
30+
push-extension: prepare-buildx push-pgvector ## Build & Upload extension image to hub. Do not push if tag already exists: make push-extension tag=0.1
2431
docker pull $(IMAGE):$(TAG) && echo "Failure: Tag already exists" || docker buildx build --push --builder=$(BUILDER) --platform=linux/amd64,linux/arm64 --build-arg TAG=$(TAG) --tag=$(IMAGE):$(TAG) .
2532

2633
help: ## Show this help

docker-compose.yaml

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
11
services:
22
mindsdb:
33
image: mindsdb/mindsdb:v25.14.0
4+
depends_on:
5+
pgvector:
6+
condition: service_healthy
47
ports:
58
- "47334:47334"
69
- "47335:47335"
7-
- "47336:47336"
8-
- "47337:47337"
9-
- "47338:47338"
1010
volumes:
1111
- data:/opt/mindsdb/data
1212
- config:/opt/mindsdb/config
1313
container_name: mindsdb_service
1414
pull_policy: always
15+
environment:
16+
MINDSDB_DB_CON: "postgresql://mindsdb:mindsdb@pgvector/mindsdb"
17+
KB_PGVECTOR_URL: "postgresql://mindsdb:mindsdb@pgvector/kb"
18+
19+
pgvector:
20+
image: mindsdb/mindsdb-docker-extension-pgvector:latest
21+
container_name: pgvector_service
22+
volumes:
23+
- data_pg:/var/lib/postgresql/data
24+
environment:
25+
POSTGRES_USER: "postgres"
26+
POSTGRES_PASSWORD: "postgres"
27+
POSTGRES_DB: "postgres"
28+
healthcheck:
29+
test: ["CMD-SHELL", "pg_isready -U postgres"]
30+
interval: 5s
31+
timeout: 5s
32+
retries: 10
1533

1634
volumes:
1735
data:
1836
config:
37+
data_pg:

init-dbs.sh

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/bash
2+
set -e
3+
4+
echo "Initializing databases..."
5+
6+
# Check required environment variables
7+
if [[ -z "${POSTGRES_USER:-}" || -z "${POSTGRES_DB:-}" ]]; then
8+
echo "Error: POSTGRES_USER and POSTGRES_DB environment variables must be set." >&2
9+
exit 1
10+
fi
11+
12+
# Log message for clarity
13+
echo "Creating additional databases..."
14+
15+
# Function to create a database
16+
create_database() {
17+
local db_name=$1
18+
echo "Creating database: $db_name"
19+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
20+
SELECT 'CREATE DATABASE $db_name'
21+
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$db_name')\gexec
22+
EOSQL
23+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
24+
SELECT 'CREATE DATABASE kb'
25+
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'kb')\gexec
26+
EOSQL
27+
}
28+
29+
# Function to create a user with permissions
30+
create_user() {
31+
local username=$1
32+
local userpassword=$2
33+
local db_name=$3
34+
echo "Creating user: $username with access to database: $db_name"
35+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$db_name" <<-EOSQL
36+
DO \$\$
37+
BEGIN
38+
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$username') THEN
39+
CREATE USER $username WITH PASSWORD '$userpassword';
40+
ELSE
41+
RAISE NOTICE 'User $username already exists. Skipping.';
42+
END IF;
43+
END
44+
\$\$;
45+
GRANT ALL PRIVILEGES ON DATABASE $db_name TO $username;
46+
GRANT ALL PRIVILEGES ON SCHEMA public TO $username;
47+
GRANT ALL ON SCHEMA public TO $username;
48+
EOSQL
49+
50+
# Do the same for the kb db
51+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "kb" <<-EOSQL
52+
DO \$\$
53+
BEGIN
54+
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$username') THEN
55+
CREATE USER $username WITH PASSWORD '$userpassword';
56+
ELSE
57+
RAISE NOTICE 'User $username already exists. Skipping.';
58+
END IF;
59+
END
60+
\$\$;
61+
GRANT ALL PRIVILEGES ON DATABASE kb TO $username;
62+
GRANT ALL PRIVILEGES ON SCHEMA public TO $username;
63+
GRANT ALL ON SCHEMA public TO $username;
64+
CREATE EXTENSION IF NOT EXISTS vector;
65+
EOSQL
66+
}
67+
68+
# Create databases
69+
create_database "mindsdb"
70+
71+
# Create user with permissions in a database
72+
create_user "mindsdb" "mindsdb" "mindsdb"
73+
74+
echo "Database and user creation completed successfully."

0 commit comments

Comments
 (0)