Caf*_*ave 9 postgresql plpgsql osx-lion postgres.app postgresql-9.3
我很茫然,我在我的本地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
Run Code Online (Sandbox Code Playgroud)
我检查过以下内容:
语言安装:
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)
Run Code Online (Sandbox Code Playgroud)
lib目录(以及pkglibdir以防万一):
$ pg_config --libdir
/Applications/Postgres.app/Contents/MacOS/lib
$ pg_config --pkglibdir
/Applications/Postgres.app/Contents/MacOS/lib
Run Code Online (Sandbox Code Playgroud)
存档文件:
$ cd /Applications/Postgres.app/Contents/MacOS/lib; ls plpg*
plpgsql.so
Run Code Online (Sandbox Code Playgroud)
DLSUFFIX设置正确:
lib/pgxs/src/Makefile.shlib:135: DLSUFFIX = .so
Run Code Online (Sandbox Code Playgroud)
尝试卸载并重新安装,但没有任何区别.有任何想法吗?
Erw*_*ter 11
您是否在同一个盒子上安装了Postgres的多个实例(多个版本或同一版本的多个实例)?标准Postgres不适合.Debian或Ubuntu有额外的基础设施,可以并行使用多个版本.不过我不知道OS X.
在标准的Postgres中,路径$libdir被编译到程序中.多个版本不相处.
执行时pg_config --pkglibdir,请确保它与您的安装相关联.跑:
which pg_config
Run Code Online (Sandbox Code Playgroud)
小调:
9.3.0?建议始终升级到最新的点发布,即9.3.2 atm.也许当前的来源可以解决您的问题.
还要检查您的设置是否使用$libdir您认为正在使用的设置
SELECT * FROM pg_settings WHERE name ~~* '%lib%';
Run Code Online (Sandbox Code Playgroud)永远不要引用语言名称.这是一个标识符:'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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20821 次 |
| 最近记录: |