加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 无法访问文件“$libdir / plpgsql”:没有这样的

发布时间:2020-12-13 18:07:22 所属栏目:百科 来源:网络整理
导读:我很茫然,我在我的本地Postgres服务器(postgres.app,Mac OS X 10.7)中创建存储过程时遇到问题,因此 $psqlpsql (9.3.0)Type "help" for help.dchaston=# CREATE OR REPLACE FUNCTION table_update()dchaston-# RETURNS TRIGGER AS $$dchaston$# BEGINdchaston
我很茫然,我在我的本地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

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

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

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

which pg_config

小调:

> 9.3.0?建议始终升级到latest point-release,即9.3.2 atm.也许当前的来源可以解决您的问题.
>还要检查您的设置是否使用您认为正在使用的$libdir

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

>永远不要引用语言名称’plpgsql’.它是一个标识符:plpgsql.
>并使用plpgsql assignment operator :=. =未记录但容忍atm.
Since Postgres 9.4 both := and = are documented.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读