python - 如何在 django 项目上使用 docker 安装 postgres 扩展

标签 python django postgresql docker docker-compose

我想向我的 Django 项目添加全文搜索,并且我使用了 PostgreSQL 和 docker,因此想向 PostgreSQL 添加扩展 pg_trgm 以进行三元相似度搜索。我应该如何使用 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:

最佳答案

你可以用困难的方式做到这一点!

$ 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.

使用默认的 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(),
        ...
    ]

关于python - 如何在 django 项目上使用 docker 安装 postgres 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70316387/

相关文章:

python - django-import-export 中的外键

python - Django 1.8 以及如何更改应用程序的迁移顺序

django - 带有 django 的 Pycharm 抛出 ImportError : cannot import name 'unittest'

sql - 如何使用 `jsonb_build_object` 创建带有聚合函数和动态键值的嵌套 JSON 返回

php - 空值的累积求和

python - 在Python中从PDF中提取具有特定标题的数据

Python copy_from 不工作并且不抛出错误

python - 在多处理中启动嵌套进程

python - Django CMS 中缺少可以查看页面权限

postgresql - 创建指向现有实例的 bluemix postgresql 服务