how to install postgres extension with docker on django project

Viewed 282

I want to add full text search to my Django project and I used PostgreSQL and docker,so want to add extension pg_trgm to PostgreSQL for trigram similarity search. how should I install this extension with dockerfile?

In shared my repository link.

FROM python:3.8.10-alpine
WORKDIR /Blog/


ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1


RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev


RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt


COPY ./entrypoint.sh .
RUN sed -i 's/\r$//g' ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

COPY . .

ENTRYPOINT ["./entrypoint.sh"]

docker-compose

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/Blog
    ports:
      - 8000:8000
    env_file:
      - ./.env.dev
    depends_on:
      - db

  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=helo
      - POSTGRES_PASSWORD=helo
      - POSTGRES_DB=helo
    
volumes:`enter code here`
  postgres_data:
1 Answers

You can do this the hard way!

$ sudo docker-compose exec db bash
$ psql -U username -d database
$ create extension pg_trgm;

This is not a good method, because you have to be careful and reinstall it every time the image is created.

or

use default django solution:

https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/operations/#trigramextension

from django.contrib.postgres.operations import TrigramExtension

class Migration(migrations.Migration):
    ...

    operations = [
        TrigramExtension(),
        ...
    ]
Related