在 postgres 容器中,导入的扩展位于何处?
in a postgres container, where are the imported extensions located?
我想在该目录上创建一个卷,并引入 plpython 和 postgis 扩展。
出于某种原因,我无法从容器中创建扩展。
我曾尝试 运行 通过使用本地版本并连接到 postgres 容器,因为本地版本具有扩展...但无济于事。 \dx 什么都不显示。
我知道在 /usr/share/postgresql/14/extension
我可以找到 plpython3u.control
其中有以下内容:
# plpython3u extension
comment = 'PL/Python3U untrusted procedural language'
default_version = '1.0'
module_pathname = '$libdir/plpython3'
relocatable = false
schema = pg_catalog
superuser = true
但我找不到它指的是什么...
我的错误,在我进入容器并制作该文件后:
CREATE EXTENSION plpython3u;
FATAL: extension "plpython3u" has no installation script nor update path for version "1.0"
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
Postgres 扩展作为共享库模块 (.so
) 文件实现,通常位于 /usr/lib/postgresql/14/lib
中。因此,例如,plpgsql
扩展名 (/usr/share/postgresql/14/extension/plpgsql.control
) 的控制文件如下所示:
# plpgsql extension
comment = 'PL/pgSQL procedural language'
default_version = '1.0'
module_pathname = '$libdir/plpgsql'
relocatable = false
schema = pg_catalog
superuser = true
trusted = true
在module_pathname
值中,$libdir
指的是/usr/lib/postgresql/14/lib
,我们在其中找到/usr/lib/postgresql/14/lib/plpgsql.so
.
如果你想启用一个新的扩展,比如 plpython3u
,你需要控制和 sql 文件以及共享库(需要为 Postgres 版本构建你是 运行).
幸运的是,plpython
扩展似乎已经打包并可以使用库存 postgres
图像进行安装。以下 Dockerfile
将生成安装了 plpython
扩展的图像:
FROM postgres:14
RUN apt-get update && \
apt-get -y install postgresql-plpython3-14 && \
apt-get clean all
如果我们从那个 Dockerfile
构建图像:
docker build -t postgres-plpython .
然后启动一个容器:
docker run -d --name postgres -e POSTGRES_PASSWORD=secret postgres-plpython
我们可以 docker exec
到容器中并将扩展名添加到
数据库:
$ docker exec -it postgres psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.
postgres=# create extension plpython3u;
CREATE EXTENSION
我想在该目录上创建一个卷,并引入 plpython 和 postgis 扩展。
出于某种原因,我无法从容器中创建扩展。
我曾尝试 运行 通过使用本地版本并连接到 postgres 容器,因为本地版本具有扩展...但无济于事。 \dx 什么都不显示。
我知道在 /usr/share/postgresql/14/extension
我可以找到 plpython3u.control
其中有以下内容:
# plpython3u extension
comment = 'PL/Python3U untrusted procedural language'
default_version = '1.0'
module_pathname = '$libdir/plpython3'
relocatable = false
schema = pg_catalog
superuser = true
但我找不到它指的是什么...
我的错误,在我进入容器并制作该文件后:
CREATE EXTENSION plpython3u;
FATAL: extension "plpython3u" has no installation script nor update path for version "1.0"
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
Postgres 扩展作为共享库模块 (.so
) 文件实现,通常位于 /usr/lib/postgresql/14/lib
中。因此,例如,plpgsql
扩展名 (/usr/share/postgresql/14/extension/plpgsql.control
) 的控制文件如下所示:
# plpgsql extension
comment = 'PL/pgSQL procedural language'
default_version = '1.0'
module_pathname = '$libdir/plpgsql'
relocatable = false
schema = pg_catalog
superuser = true
trusted = true
在module_pathname
值中,$libdir
指的是/usr/lib/postgresql/14/lib
,我们在其中找到/usr/lib/postgresql/14/lib/plpgsql.so
.
如果你想启用一个新的扩展,比如 plpython3u
,你需要控制和 sql 文件以及共享库(需要为 Postgres 版本构建你是 运行).
幸运的是,plpython
扩展似乎已经打包并可以使用库存 postgres
图像进行安装。以下 Dockerfile
将生成安装了 plpython
扩展的图像:
FROM postgres:14
RUN apt-get update && \
apt-get -y install postgresql-plpython3-14 && \
apt-get clean all
如果我们从那个 Dockerfile
构建图像:
docker build -t postgres-plpython .
然后启动一个容器:
docker run -d --name postgres -e POSTGRES_PASSWORD=secret postgres-plpython
我们可以 docker exec
到容器中并将扩展名添加到
数据库:
$ docker exec -it postgres psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.
postgres=# create extension plpython3u;
CREATE EXTENSION