postgresql 从缺少PGXS的源安装Apache-AGE时,make install出错

fykwrbwg  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(3)|浏览(351)

错误:Makefile:120: /usr/lib/postgresql/12/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory make: *** No rule to make target '/usr/lib/postgresql/12/lib/pgxs/src/makefiles/pgxs.mk'.
我使用pgenv进行PostgreSQL版本管理,之前我只通过pgenv使用PostgreSQL 12和13,而sudo make install可以工作。
我想在PG 14上测试Apache-AGE,所以我使用pgenv build 14.0安装了PG 14。PostgreSQL服务器已经启动并运行,我已经测试了一些查询。
但我得到错误,而安装从源. makefile中的第120行出错,即

PG_CONFIG ?= pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

字符串
Make文件执行pg_config --pgxs命令获取pgxs路径,当我们用传统方法安装PostgreSQL时,它会获取旧的pgxs路径,即从apt存储库。

但是我执行的是相同的命令pg_config --pgxs,我在终端中得到了正确的路径

~ pg_config --pgxs

/home/sarthak/pgenv/pgsql-14.0/lib/pgxs/src/makefiles/pgxs.mk


我已经在默认的shell zsh和bash上尝试过这个命令。
那么,如果它给出了pgxs的正确路径,为什么make file在运行相同的命令时会得到不同的路径呢?
现在我得到这个错误的所有PostgreSQL版本,这之前也是工作。
编辑:从终端运行时添加pg_config的输出

pg_config                                                                        ✔  10.4G   
BINDIR = /home/sarthak/pgenv/pgsql-14.0/bin
DOCDIR = /home/sarthak/pgenv/pgsql-14.0/share/doc
HTMLDIR = /home/sarthak/pgenv/pgsql-14.0/share/doc
INCLUDEDIR = /home/sarthak/pgenv/pgsql-14.0/include
PKGINCLUDEDIR = /home/sarthak/pgenv/pgsql-14.0/include
INCLUDEDIR-SERVER = /home/sarthak/pgenv/pgsql-14.0/include/server
LIBDIR = /home/sarthak/pgenv/pgsql-14.0/lib
PKGLIBDIR = /home/sarthak/pgenv/pgsql-14.0/lib
LOCALEDIR = /home/sarthak/pgenv/pgsql-14.0/share/locale
MANDIR = /home/sarthak/pgenv/pgsql-14.0/share/man
SHAREDIR = /home/sarthak/pgenv/pgsql-14.0/share
SYSCONFDIR = /home/sarthak/pgenv/pgsql-14.0/etc
PGXS = /home/sarthak/pgenv/pgsql-14.0/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE =  '--prefix=/home/sarthak/pgenv/pgsql-14.0'
CC = gcc
CPPFLAGS = -D_GNU_SOURCE
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wformat-security -fno-strict-aliasing-fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2
CFLAGS_SL = -fPIC
LDFLAGS = -Wl,--as-needed -Wl,-rpath,'/home/sarthak/pgenv/pgsql-14.0/lib',--enable-new-dtags
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgcommon -lpgport -lz -lreadline -lpthread -lrt -ldl -lm
VERSION = PostgreSQL 14.0

4nkexdtk

4nkexdtk1#

PG_CONFIG不是makefile的路径。它是所有二进制文件所在的bin文件夹的路径。
尝试使用以下方法更改PG_CONFIG的值:

export PG_CONFIG=/path/to/postgres/14/bin

字符串

wvyml7n5

wvyml7n52#

你该跑了

pgenv config write 14.0 && pgenv config edit 14.0

字符串
调整“configure”和“make”选项和标志,然后再次运行构建
您可以在这里阅读更多关于配置pgevn build的信息。

yhived7q

yhived7q3#

这个问题对于任何使用pgenv的人来说都是常见的。发生的是,当我们卸载通过sudo apt install postgresql-server-dev-all安装的postgresql时,位于/usr/bin中的pg_config二进制文件不会被删除。
pgenv在其根目录下安装新的PostgreSQL版本,pg_config的位置为/home/sarthak/pgenv/pgsql/bin/pg_config,并将其添加到User PATH而不是sudo PATH
因此,如果我们运行像make install这样命令,它将工作,即没有sudo。但是当我们运行sudo make install时,make文件会在sudo环境中执行pg_config --pgxs,它会在/usr/bin目录中查找pg_config,因为它在sudo路径中。
解决方案:使用以下命令将/pgenv/pgsql/bin/pg_config中的pg_config软链接到/usr/bin:在/usr/bin目录中运行此命令
sudo ln -s /home/sarthak/pgenv/pgsql/bin/pg_config pg_config
然后它应该与或没有sudo工作

相关问题