Установка и использование расширения pg_cron на Postgres внутри контейнера Docker - PullRequest
2 голосов
/ 04 мая 2020

Я попытался установить pg_cron на Postgres, работающий внутри контейнера Docker, но получил эту ошибку could not access file "pg_cron": No such file or directory. Любые идеи о том, как решить?

Исходя из { ссылка }, я попробовал следующее:

docker -compose.yml

version: '3.7'
services:
  pg:
    container_name: pg-container
    image: postgres:11.5
    environment:
      POSTGRES_DB: "pgdb"
      POSTGRES_USER: "pguser"
      POSTGRES_PASSWORD: "pgpass"
    volumes:
      - ./:/docker-entrypoint-initdb.d
      - pgstorage
    ports:
      - "5432:5432"

volumes:
  pgstorage: 

002-setup. sh

#!/bin/sh
# Remove last line "shared_preload_libraries='citus'"
sed -i '$ d' ${PGDATA}/postgresql.conf
cat <<EOT >> ${PGDATA}/postgresql.conf
shared_preload_libraries='pg_cron'
cron.database_name='${POSTGRES_DB:-postgres}'
EOT
# Required to load pg_cron
pg_ctl restart 

003-main. sql

CREATE EXTENSION pg_cron; 

1 Ответ

0 голосов
/ 04 мая 2020

Из того, что я вижу, вы не устанавливаете pg_cron в любом месте. Поскольку он не упакован с изображением Postgres Docker по умолчанию, вам придется позаботиться об этом.

Например, расширив Image и используя запись build в своем docker-compose.yml.

# Dockerfile relative to docker-compose.yml

FROM postgres:11.5

RUN apt-get update && apt-get -y install git build-essential postgresql-server-dev-11

RUN git clone https://github.com/citusdata/pg_cron.git
RUN cd pg_cron && make && make install
version: '3.7'
services:
  pg:
    container_name: pg-container
    build: .
    environment:
      POSTGRES_DB: "pgdb"
      POSTGRES_USER: "pguser"
      POSTGRES_PASSWORD: "pgpass"
    volumes:
      - ./:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"

Это сработало для меня - возможно, нужна дополнительная оптимизация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...