【问题标题】:Can't install extension on Postgresql无法在 Postgresql 上安装扩展
【发布时间】:2020-06-09 05:49:24
【问题描述】:

我尝试在我的 Postgresql 12 上安装 semver。我成功安装了 postgis,并使用以下命令在我的 Centos 7 服务器上安装了 pg-semver(semver 扩展):

yum install pg-semver

然后我跑了

CREATE EXTENSION semver;

我收到以下错误:

无法打开扩展控制文件 /usr/pgsql-12/share/extension/semver.control :没有这样的文件或 目录

我将所有文件从“/usr/share/pgsql/extension/”复制到“/usr/pgsql-12/share/extension”。现在我收到以下错误:

错误:错误:无法访问文件“semver”:没有这样的文件或 目录

更新(2020 年 2 月 28 日):

我删除了 pg-semver,因为它为 PSQL 9.2 提供。我现在尝试使用开发人员提供的文档来构建自己。

我从https://github.com/theory/pg-semver/archive/master.zip 下载了 semver 扩展,然后解压缩。之后我运行以下命令:

make

然后得到:

make:对于“all”目标没有什么可做的。 那么:

make install

然后得到:

/bin/sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./semver.control '/usr/share/pgsql/extension/' /bin/sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -米 644 ./sql/semver--0.20.0.sql ./sql/semver--unpackaged--0.2.1.sql ./sql/semver--0.20.0--0.21.0.sql ./sql/semver--0.12.0--0.13.0.sql ./sql/semver--0.3.0--0.4.0.sql ./sql/semver--0.16.0--0.17.0.sql ./sql/semver--0.13.0--0.15.0.sql ./sql/semver--0.11.0--0.12.0.sql ./sql/semver--0.2.4--0.3.0.sql ./sql/semver--0.2.1--0.2.4.sql ./sql/semver--0.5.0--0.10.0.sql ./sql/semver--0.10.0--0.11.0.sql ./sql/semver.sql ./sql/semver--0.17.0--0.20.0.sql ./sql/semver--0.15.0--0.16.0.sql '/usr/share/pgsql/extension/' /bin/sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 755 src/semver.so '/usr/lib64/pgsql/' /bin/sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./doc/semver.mmd '/usr/share/doc/pgsql/extension/'

然后:

make installcheck

然后得到:

============== 删除数据库“contrib_regression”============== DROP DATABASE ============== 创建数据库“contrib_regression” ============== CREATE DATABASE ALTER DATABASE ============== 安装plpgsql ============== 创建语言 ============== 运行回归测试查询 ============== 测试基地...失败(测试过程退出 退出代码 3)

--------------- 1 个测试失败。

导致某些测试失败的差异可以在 文件“/tmp/ttt/pg-semver-master/regression.diffs”。测试副本 您在上面看到的摘要保存在文件中 “/tmp/ttt/pg-semver-master/regression.out”。

make: *** [installcheck] 错误 1

regression.out的内容:

……!好的 278 - 次要版本检查!好的 279 - 功能 get_semver_patch() 应该存在!好的280-semver!好的 281 - 功能 get_semver_patch() 应该返回整数!好的 282 - 补丁版本 查看 !好的 283 - 函数 get_semver_prerelease() 应该存在!好的 第284话!好的 285 - 函数 get_semver_prerelease() 应该返回 文本 !好的 286 - 预发布标签检查!好的 287 - 1.0.0 应该在 范围 [1.0.0, 2.0.0] !好的 288 - 1.0.0 不应该在范围 [1.0.1, 2.0.0]!好的 289 - 2.0.0 不应该在 [1.0.1, 2.0.0) 范围内!好的 290 - 1.9999.9999 应该在 [1.0.1, 2.0.0) 范围内!好的 291 - 1000.0.0 应该在 [1.0.0,) 范围内!好的 292 - 应该可以使用 semverranges 数组 --- 1,2 ---- \set ECHO none ! psql:sql/semver.sql:30: 错误: 无法访问文件 "semver": 没有这样的文件或目录

/usr/pgsql-12/lib/ 中没有 semver.so,/usr/lib64/pgsql/ 中有 semver.so 但它也适用于 9.2 版?

【问题讨论】:

    标签: postgresql centos7 postgresql-extensions


    【解决方案1】:

    按照本指南安装 semver:

    https://pgxn.org/dist/semver/

    【讨论】:

    • 我已经做到了。当我下载 zhe semver zip 文件并解压缩时,我运行 make install 但我收到错误“make: *** No rule to create “install”。够了。” (翻译)
    【解决方案2】:

    您无法安装semver的原因有两个:

    您收到错误could not access file "semver": No such file or directory,因为您没有将/usr/lib64/pgsql/semver.so 复制到/usr/pgsql-12/lib。但是,由于以下第二个原因,您不能简单地复制它:

    yum install pg-semver 将从 EPEL 库中安装 semver,该库是 CentOS 7 附带的预打包 PostgreSQL 版本 9.2。您安装了 PostgreSQL 版本 12(通过自己编译或下载 PGDG 存储库并安装postgresql12 包)。 EPEL 存储库附带的 semver.so 文件不兼容,因为它是针对 PostgreSQL 版本 9.2 而不是版本 12 编译的。如果您尝试将 EPEL semver.so 加载到 v.12 数据库中,您将看到:

    postgres=# create extension semver;
    ERROR:  incompatible library "/usr/pgsql-12/lib/semver.so": version mismatch
    DETAIL:  Server is version 12, library is version 9.2.
    

    因此,安装semver 的唯一方法是按照编译步骤detailed in the documentation

    make
    make install
    make installcheck
    psql -c "CREATE EXTENSION semver;"
    

    如果您还没有这样做(并且您通过 PGDG RPM 安装了 postgresql 12),则需要执行以下操作才能下载和编译:

    yum -y install postgresql12-devel
    yum -y groupinstall "Development Tools"
    

    您还可能遇到编译问题,例如:clang: error: unknown argument: '-flto=thin',因为 PGDG RPM 是使用 clang 编译的——您可以通过以下方式绕过它:

    with_llvm=no make -e
    with_llvm=no make -e install
    with_llvm=no make -e installcheck
    psql -c "create extension semver"
    

    披露:我为EnterpriseDB (EDB)工作

    【讨论】:

    • 哦,现在我明白了 ht 不兼容的问题。但是当我运行“make installcheck”时,我得到“!psql:sql/semver.sql:30:错误:无法访问文件“semver”:没有这样的文件或目录”......
    • 嗯,您的粘贴似乎被破坏了-您可以使用错误消息(以及更多上下文,例如您发出的命令)更新您的原始帖子吗?另外,我更新了我的帖子回复 clang 您可能会看到的错误
    • 啊,我明白了。奇怪——你可能想make clean,然后再make。但根据您的输出,您可能不需要这样做。我看到/bin/sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 755 src/semver.so '/usr/lib64/pgsql/'——这意味着/usr/lib64/pgsql/semserver.so` 应该适用于您的postgresql12 版本(除非您与其他一些Postgres 版本发生冲突)。只需将 semver.so 复制到 /usr/pgsql-12/lib 并再次尝试 make installcheck
    • 我也做了 make clean 然后重新启动并复制了 semver.so,但我仍然得到“!详细信息:服务器是 12 版,库是 9.2 版。”错误
    • 如果是这种情况,您的系统上似乎仍然安装了 Postgres 9.2(即,您可能同时安装了 v. 9.2 和 v. 12)——您可以通过查看rpm -aq | grep postgrespg_config 的输出 - 确保删除 v. 9.2 的所有痕迹并再次尝试您的 make
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2014-05-08
    • 2019-09-20
    • 1970-01-01
    • 2023-02-24
    • 2021-09-02
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多