PostgreSQL过程语言“;";找不到
我试图在PostgreSQL 9.2数据库中使用过程语言。我已经安装了PostgreSQL过程语言“;";找不到,postgresql,stored-procedures,keyword,capitalization,plr,Postgresql,Stored Procedures,Keyword,Capitalization,Plr,我试图在PostgreSQL 9.2数据库中使用过程语言。我已经安装了plr语言,并试图将其添加到数据库中。当我运行命令createextensionplr时我得到以下错误: ERROR: language "C" does not exist STATEMENT: CREATE EXTENSION plr; ERROR: language "C" does not exist 当我用select*from pg_language列出数据库中可用的语言时我明白了 lanname |
plr
语言,并试图将其添加到数据库中。当我运行命令createextensionplr时代码>我得到以下错误:
ERROR: language "C" does not exist
STATEMENT: CREATE EXTENSION plr;
ERROR: language "C" does not exist
当我用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 | 12514 | 12515 | 12516 |
(4 rows)
因此有一种语言c
,但它不是大写的(不确定这是否有区别)
我想知道为什么plr
扩展找不到C
过程语言?您可能在PostgreSQL 9.2中遇到了这种变化(引用了:
在CREATE中不再强制使用小写程序语言名称
功能(罗伯特·哈斯)
虽然未加引号的语言标识符仍然是小写的,但字符串和
带引号的标识符不再强制按大小写。比如说
创建函数。。。语言“C”将不再工作;一定是
拼写为“c”,最好省略引号
这也反映在
语言名称
用于实现函数的语言的名称。可以是SQL
、C
、internal
,也可以是用户定义过程的名称
语言。为了向后兼容,名称可以用
单引号
至少从7.3版(可能更长)开始,就不鼓励引用语言名称,但很明显,旧习惯很难改掉。删除'C'
周围的引号可以解决此问题,从而得出:语言C
或语言C
PL/R
在这方面还没有为PostgreSQL 9.2做好准备,这是从
乔·康威的反馈
乔·康威留下的答案被删除了,因为它应该是一条评论。我将其粘贴到此处,供无法看到已删除答案的普通公众使用:
我得到消息,只是没有时间做一个新的PL/R版本。
在12月之前寻找它,但同时手动解决方法
上面提到的是非常简单的
我和pg_collkey也有类似的问题。我相信你的情况可能有同样的解决办法。我所做的是:postgres扩展目录中有一个.sql文件,告诉postgres如何安装扩展。在我的例子中,它被称为pg_collkey--0.5.0.sql。您需要修改该sql文件。在我的系统上(使用Mac OS X和自制),文件位于/usr/local/share/postgresql/extension/pg_collkey--0.5.0.sql)。它可能在LANGUAGE子句中包含大写字母“C”,如下所示:
CREATE OR REPLACE FUNCTION collkey (text, text, bool, int4, bool) RETURNS bytea
LANGUAGE 'C' IMMUTABLE STRICT AS
'$libdir/collkey_icu.so',
'pgsqlext_collkey';
将其更改为小写字母“c”,并在psql中重新运行“CREATE EXTENSION pg_collkey;”命令:
psql -c 'CREATE EXTENSION pg_collkey;' my_database_name
当然,您需要使用“plr”而不是pg_collkey作为扩展名。如果该语言不受信任,那么您必须是超级用户才能使用给定的语言创建函数(或语言)。您是否尝试从具有超级用户访问权限的帐户执行此操作?是否尝试指定小写字母“c”?在字符串中,大小写往往很重要。在字符串之外,通常不会。我有超级用户状态是。但是我如何指定小写字母“c”?你确定PL/R支持9.2吗?我想Joe Conway在PL/R的第8.3.0.13.1节中已经解决了这个问题。