пятница, 28 мая 2010 г.

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".

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru