无法访问文件"$ libdir/plpgsql":没有这样的文件或目录

 暗淡的天2004_976 发布于 2023-02-07 16:34

我很茫然,我在我的本地Postgres服务器(postgres.app,Mac OS X 10.7)中创建存储过程时遇到问题,因此

$ psql
psql (9.3.0)
Type "help" for help.

dchaston=# CREATE OR REPLACE FUNCTION table_update()
dchaston-# RETURNS TRIGGER AS $$
dchaston$# BEGIN
dchaston$#   NEW.last_edit = now();
dchaston$#   RETURN NEW;
dchaston$# END;
dchaston$# $$ language 'plpgsql';
ERROR:  could not access file "$libdir/plpgsql": No such file or directory

我检查过以下内容:

语言安装:

dchaston=# select * from pg_language;
lanname  | lanowner | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator | lanacl
---------+----------+---------+--------------+---------------+-----------+--------------+--------
internal |       10 | f       | f            |             0 |         0 |         2246 | 
c        |       10 | f       | f            |             0 |         0 |         2247 | 
sql      |       10 | f       | t            |             0 |         0 |         2248 | 
plpgsql  |       10 | t       | t            |         12019 |     12020 |        12021 | 
(4 rows)

lib目录(以及pkglibdir以防万一):

$ pg_config --libdir
/Applications/Postgres.app/Contents/MacOS/lib
$ pg_config --pkglibdir
/Applications/Postgres.app/Contents/MacOS/lib

存档文件:

$ cd /Applications/Postgres.app/Contents/MacOS/lib; ls plpg*
plpgsql.so

DLSUFFIX设置正确:

lib/pgxs/src/Makefile.shlib:135:    DLSUFFIX        = .so

尝试卸载并重新安装,但没有任何区别.有任何想法吗?

1 个回答
  • 您是否在同一个盒子上安装了Postgres的多个实例(多个版本或同一版本的多个实例)?标准Postgres不适合.Debian或Ubuntu有额外的基础设施,可以并行使用多个版本.不过我不知道OS X.

    在标准的Postgres中,路径$libdir被编译到程序中.多个版本不相处.
    执行时pg_config --pkglibdir,请确保它与您的安装相关联.跑:

    which pg_config
    

    小调:

    9.3.0?建议始终升级到最新的点发布,即9.3.2 atm.也许当前的来源可以解决您的问题.

    还要检查您的设置是否使用$libdir您认为正在使用的设置

    SELECT * FROM pg_settings WHERE  name ~~* '%lib%';
    

    永远不要引用语言名称'plpgsql'.这是一个标识符:plpgsql.

    并使用plpgsql 赋值运算符:=.=没有证件但是耐受atm.
    因为Postgres 9.4:==被记录在案.

    否则你的函数定义很好.这不是问题的根源:

    CREATE OR REPLACE FUNCTION table_update()
      RETURNS trigger AS
    $func$
    BEGIN
       NEW.last_edit := now();
       RETURN NEW;
    END
    $func$  LANGUAGE plpgsql;
    

    2023-02-07 16:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有