我想在該目錄上創建一個卷,并引入 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.
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/481686.html
標籤:Python PostgreSQL 码头工人
上一篇:回滾不適用于Go語言事務包裝器
