Ste*_*eve 10 postgresql docker docker-compose
我尝试pg_cron在 Docker 容器内运行的 Postgres 上安装,但收到此错误could not access file "pg_cron": No such file or directory。关于如何解决的任何想法?
基于/sf/answers/3625828811/,我尝试了以下方法:
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:
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
003-main.sql
CREATE EXTENSION pg_cron;
Run Code Online (Sandbox Code Playgroud)
据我所知,您没有在任何地方安装pg_cron 。由于它没有与默认的 Postgres Docker 映像一起打包,因此您必须注意这一点。
例如,通过扩展图像并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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
在较新版本的 Postgres 中 - 您可以pg_cron使用apt-get.
FROM postgres:16-bookworm
RUN apt-get update && \
apt-get -y install postgresql-16-cron && \
apt-get clean \
&& rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)
这将处理“安装”部分。还需要配置pg_cron并最终创建扩展。
# add to postgresql.conf
# required to load pg_cron background worker on start-up
shared_preload_libraries = 'pg_cron'
# optionally, specify the database in which the pg_cron background worker should run (defaults to postgres)
cron.database_name = 'postgres'
Run Code Online (Sandbox Code Playgroud)
或者,使用 Docker Compose,这些配置值也可以作为command条目传递:
# 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
Run Code Online (Sandbox Code Playgroud)
最后,您必须创建扩展(在迁移脚本、初始化脚本或其他脚本中)。
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"
Run Code Online (Sandbox Code Playgroud)
加载扩展并激活它(创建扩展...)可以在 Docker 中通过多种方式完成:https ://hub.docker.com/_/postgres/
这对我有用 - 它可能需要更多优化。
| 归档时间: |
|
| 查看次数: |
14643 次 |
| 最近记录: |