找不到PostgreSQL过程语言"C"

yel*_*cap 7 postgresql stored-procedures capitalization keyword plr

我试图在PostgreSQL 9.2数据库中使用PL/R过程语言.我已经安装了该plr语言,我正在尝试将其添加到数据库中.当我运行该命令时,CREATE EXTENSION plr;我收到以下错误:

ERROR:  language "C" does not exist
STATEMENT:  CREATE EXTENSION plr;
ERROR:  language "C" does not exist
Run Code Online (Sandbox Code Playgroud)

当我列出数据库中的可用语言时,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)
Run Code Online (Sandbox Code Playgroud)

所以有一种语言,c但它不是大写字母(不确定这是否有所不同).

我想知道为什么plr扩展C程序没有找到程序语言?

Erw*_*ter 12

您可能在PostgreSQL 9.2中遇到此更改(引用此处发行说明):

在CREATE FUNCTION中不再强制使用小写程序语言名称(Robert Haas)

虽然不带引号的语言标识符仍然是小写的,但字符串和带引号的标识符不再被强制缩小.因此,例如CREATE FUNCTION ... LANGUAGE'C'将不再起作用; 它必须拼写为"c",或者更好地省略引号.

它也反映在手册中CREATE FUNCTION

LANG_NAME

该函数中实现语言的名称.可以是SQL,C,internal,用户定义的过程语言或名称.为了向后兼容,名称可以用单引号括起来.

至少从版本7.3(可能更长)开始,不鼓励引用语言名称,但显然老习惯很难.删除引号可以'C'解决问题,到达:LANGUAGE cLANGUAGE C.

PL/R项目页面来看,在这方面还没有为PostgreSQL 9.2做好准备.

从反馈Joe Conway

Joe Conway留下了一个被删除的答案,因为它应该是一个评论.我将它粘贴到一般公众身上,无法看到已删除的答案:

我得到了消息,只是没有时间做新的PL/R版本.在12月之前查找它,但与此同时,上面提到的手动解决方法非常简单.