PostgreSQL процедурный язык "C" не найден
Я пытаюсь использовать PL / R процедурный язык, в базе данных PostgreSQL 9.2. Я установил plr
язык и я пытаюсь добавить его в базу данных. Когда я запускаю команду CREATE EXTENSION plr;
Я получаю следующую ошибку:
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
но это не прописными буквами (не уверен, что это имеет значение).
I интересно, почему
2 ответов
вы, вероятно, сталкиваетесь с этим изменением в PostgreSQL 9.2 (цитируя примечания к выпуску здесь):
больше не принудительно строчные имена процедурных языков в CREATE Функция (Роберт Хаас)
пока некотируемых язык еще маленькими буквами, строками и указанные идентификаторы больше не подвергаются принудительному понижению. Так, например СОЗДАТЬ ФУНКЦИЮ ... Язык "С" больше не будет работать; он должен быть пишется " c " или лучше опустите цитаты.
это также отражено в руководство CREATE FUNCTION
lang_name
имя языка, на котором реализована функция. Может быть
SQL
,C
,internal
, или имя определяемой пользователем процедуры язык. Для обратной совместимости имя может быть заключено в простые кавычки.
цитирование названия языка было обескуражено с тех пор, как версия 7.3 (возможно дольше), но старые привычки умирают с трудом, очевидно. Убрав кавычки 'C'
устраняет проблему, прибывая в:LANGUAGE c
или LANGUAGE C
.
PL/R
не был готов к PostgreSQL 9.2 в этом отношении, судя по страница проекта.
обратная связь от Джо Конвея
Джо Конвей оставил ответ, который был удален, потому что это должен быть комментарий. Я вставляю его здесь для широкой публики, которая не может видеть удаленные ответы:
я получил сообщение, просто не было времени, чтобы сделать новый выпуск PL/R. Ищите его к декабрю, но тем временем ручной обходной путь отмеченное выше довольно просто.
у меня была аналогичная проблема с pg_collkey. Я считаю, что ваша ситуация может иметь такое же решение. Вот что я сделал: есть .sql-файл в каталоге расширения postgres, который сообщает postgres, как установить расширение. В моем случае, это называется pg_collkey--0.5.0.язык SQL. Вам нужно будет изменить этот файл sql. В моей системе (с использованием Mac OS X и Homebrew) файл находится по адресу /usr/local/share/postgresql/extension/pg_collkey--0.5.0.язык SQL.) Вероятно, он содержит заглавную "C" в предложении LANGUAGE, вот так:
CREATE OR REPLACE FUNCTION collkey (text, text, bool, int4, bool) RETURNS bytea
LANGUAGE 'C' IMMUTABLE STRICT AS
'$libdir/collkey_icu.so',
'pgsqlext_collkey';
измените его на нижний регистр "c" и повторно запустите команду" CREATE EXTENSION pg_collkey; " в psql:
psql -c 'CREATE EXTENSION pg_collkey;' my_database_name
конечно, вам нужно будет использовать "plr" вместо pg_collkey для имени расширения.