в MySQL

Использование UDF: ERROR 1125 (HY000) at line 1: Function already exists

В нашей системе на tutu используется несколько UDF-функций mysql. Не буду вдаваться в подробности, кому интересно — гугл расскажет, что такое UDF. Упомяну лишь, что это функции для MySQL, написанные на благородном C. В этом посте хочу сосредоточится на проблеме ERROR 1125, которая просто съела мне мозг.

Магия mysql сделала это…
Удалил функцию из таблицы mysql.func. В папке /usr/lib/mysql/plugin/ *.so файлов нет. А ERROR 1125 тут.
Выяснилось в итоге, что несмотря на тот факт, что so-файлы храняться у mysql в /usr/lib/mysql/plugin/, мускуль одним глазом так же посмотривает на /usr/lib/*.so
И если видит там сошку, то функцию установить не даёт — хоть ты тресни.
Последовательность действий:

  1. Удалить фунцию из таблицы
    1. DELETE FROM mysql.func WHERE name = ‘myfunction’;
  2. выполнить
    1. sudo rm -f /usr/lib/myfunction.so;sudo rm -f /usr/lib/mysql/plugin/myfunction.so
  3. скопировать .so файл в директорию плагинов mysql
    1. sudo cp myfunction.so /usr/lib/mysql/plugin/myfunction.so
  4. запустить mysql
    1. CREATE FUNCTION myfunction RETURNS REAL SONAME ‘myfunction.so’;

    . Естесвенно REAL нужно заменить на свой возвращаемый тип данных.

P.S. Напоминаю, что скромный владелец этого ит-блога использует Debian версии Squeeze, а значит приведённый пример гарантировано не заработает на этих ваших генту, фряхах, шапках и др. Возможно он запустится корректно на ubuntu, но не факт.