UUID для PostgreSQL с помощью Tcl
Понадобилось мне быстро добавить уникальный идентификатор (uuid) к таблице. На тикле нужная функция пишется очень легко - с помощью пакета uuid или вызова внешней утилиты. Генерация 10 000 идентификаторов во втором случае занимает около 10 с на десктопе, что вполне себе шустро, так что на нем и остановимся.
Установим пакет с нужной нам утилитой:
Установим пакет с нужной нам утилитой:
sudo aptitude install uuidА вот и реализация функции:
--DROP FUNCTION uuid();
CREATE OR REPLACE FUNCTION uuid()
RETURNS text AS
$BODY$
return [string map {- ""} [exec uuid]]
$BODY$
LANGUAGE 'pltclu' VOLATILE SECURITY DEFINER;
ALTER FUNCTION uuid() OWNER TO offline;
--select uuid();
alter table offline.documents add column checksum text not null default uuid();
CREATE UNIQUE INDEX documents_checksum_idx
ON offline.documents
USING btree
(checksum);
Очень даже наглядная иллюстрация "unix way". Разумеется, так делать можно только под юниксами, где порождение множества процессов есть совершенно нормальное дело - потому и "unix way".
Comments