Docker-Compose和Postgres扩展

zrfyljdw  于 2023-03-22  发布在  Docker
关注(0)|答案(3)|浏览(155)

这是我的docker-compose文件。有什么简单的方法可以安装postgres扩展吗?我正在尝试安装pg_trgm
编辑:我现在有两个dockerfiles和一个安装脚本,当我运行docker-compose up build时,它似乎不起作用
Internal server error: pq: operator does not exist: character varying % unknown

services:
  db:
    build:
      context: .
      dockerfile: db/Dockerfile
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=x
      - POSTGRES_PASSWORD=x
      - POSTGRES_DB=x

  api:
    build:
      context: .
      args:
        app_env: ${APP_ENV}
    volumes:
      - .:/go/src/x/y/z
    ports:
      - "8080:8080"

db/Dockerfile:

FROM postgres
COPY db/install-extensions.sql /docker-entrypoint-initdb.d

db/install-extensions.sql

CREATE EXTENSION IF NOT EXISTS pg_trgm;
lh80um4z

lh80um4z1#

试试这个

FROM postgres
COPY ./install-extensions.sql /docker-entrypoint-initdb.d

并从文件中删除db。
或者你可以写

version: "3.1"

services:
  db:
    image: postgres:9.6
    restart: always
    environment:
      POSTGRES_PASSWORD: unit
      POSTGRES_USER: unit
      POSTGRES_DB: unit
    ports:
      - 5432:5432
    volumes:
      - ./scripts:/docker-entrypoint-initdb.d

那么
1.创建目录脚本
1.把你的.sql或.sh文件
1.移除已创建的容器docker-compose rm -v
1.启动docker docker-compose up --build
1.在日志中,您必须看到类似于以下内容的内容:
created_extension

pftdvrlh

pftdvrlh2#

我不知道为什么,但为了让它工作,我不得不使用一个shell脚本:

#!/usr/bin/env bash

echo "enabling pg_trgm on database $POSTGRES_DB"
psql -U $POSTGRES_USER --dbname="$POSTGRES_DB" <<-'EOSQL'
  create extension if not exists pg_trgm;
EOSQL
echo "finished with exit code $?"

可能是因为我覆盖了默认的数据库和用户名。

zlhcx6iw

zlhcx6iw3#

关于docker-entrypoint-initdb.d的答案很好,但对我来说不起作用,因为我已经有了一个数据库。实际上,在这种情况下,使用您的迁移系统添加扩展。
对于django,迁移看起来像这样:

from django.db import migrations

def create_third_party_extension(apps, schema_editor):
    schema_editor.execute("CREATE EXTENSION pg_trgm;")

def drop_third_party_extension(apps, schema_editor):
    schema_editor.execute("DROP EXTENSION IF EXISTS pg_trgm;")

class Migration(migrations.Migration):

    dependencies = [
        ('core', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(create_third_party_extension, reverse_code=drop_third_party_extension, atomic=True)
    ]

相关问题