我想在我的Django项目中添加全文搜索,我使用了PostgreSQL和docker,所以我想在PostgreSQL中添加扩展pg_trgm来进行三元组相似性搜索。我应该如何使用dockerfile安装此扩展?
在中共享了我的存储库链接。
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撰写
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:
你可以通过艰苦的方式做到这一点!
$ sudo docker-compose exec db bash
$ psql -U username -d database
$ create extension pg_trgm;
这不是一个好方法,因为每次创建图像时都必须小心并重新安装。
或
使用默认django解决方案:
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(),
...
]
对于从头开始构建PostgreSQL映像的人来说,另一种更干净的方法是包括他/她想要构建映像的所有扩展,方法是在环境变量下使用POSTGRES_EEXTENSIONS:(在docker-compose.yml文件内(指定它们
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
POSTGRES_EXTENSIONS: pg_trgm ,your_other_extension
volumes:`enter code here`
postgres_data:
将您的_other_extension替换为要安装的扩展名,并确保用逗号分隔它们。
除了POSTGRES_PASSWORD、POSTGRES_DB、POSTGERS_USER和POSTGRES_EEXTENSIONS之外,还可以为PostgreSQL容器设置其他环境变量。以下是一些常用的: