CREATE OR REPLACE FUNCTION cipher_exists(text) RETURNS boolean AS '$libdir/pgcrypto', 'pg_cipher_exists' LANGUAGE c; CREATE OR REPLACE FUNCTION crypt(text, text) RETURNS text AS '$libdir/pgcrypto', 'pg_crypt' LANGUAGE c; CREATE OR REPLACE FUNCTION decrypt(bytea, bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_decrypt' LANGUAGE c; CREATE OR REPLACE FUNCTION decrypt_iv(bytea, bytea, bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_decrypt_iv' LANGUAGE c; CREATE OR REPLACE FUNCTION digest(text, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_digest' LANGUAGE c; CREATE OR REPLACE FUNCTION digest(bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_digest' LANGUAGE c; CREATE OR REPLACE FUNCTION digest_exists(text) RETURNS boolean AS '$libdir/pgcrypto', 'pg_digest_exists' LANGUAGE c; CREATE OR REPLACE FUNCTION encrypt(bytea, bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_encrypt' LANGUAGE c; CREATE OR REPLACE FUNCTION encrypt_iv(bytea, bytea, bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_encrypt_iv' LANGUAGE c; CREATE OR REPLACE FUNCTION gen_salt(text) RETURNS text AS '$libdir/pgcrypto', 'pg_gen_salt' LANGUAGE c; CREATE OR REPLACE FUNCTION gen_salt(text, integer) RETURNS text AS '$libdir/pgcrypto', 'pg_gen_salt_rounds' LANGUAGE c; CREATE OR REPLACE FUNCTION hmac(text, text, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_hmac' LANGUAGE c; CREATE OR REPLACE FUNCTION hmac(bytea, bytea, text) RETURNS bytea AS '$libdir/pgcrypto', 'pg_hmac' LANGUAGE c; CREATE OR REPLACE FUNCTION hmac_exists(text) RETURNS boolean AS '$libdir/pgcrypto', 'pg_hmac_exists' LANGUAGE c; CREATE OR REPLACE FUNCTION md5(bytea) RETURNS character(32) AS $_$ BEGIN RETURN ENCODE(DIGEST($1, 'md5'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION sha1(bytea) RETURNS character(40) AS $_$ BEGIN RETURN ENCODE(DIGEST($1, 'sha1'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION sha1_md5(bytea) RETURNS character(40) AS $_$ BEGIN RETURN ENCODE(DIGEST(ENCODE(DIGEST($1, 'md5'), 'hex'), 'sha1'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION md5(text) RETURNS character(32) AS $_$ BEGIN RETURN ENCODE(DIGEST($1, 'md5'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION sha1(text) RETURNS character(40) AS $_$ BEGIN RETURN ENCODE(DIGEST($1, 'sha1'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION sha1_md5(text) RETURNS character(40) AS $_$ BEGIN RETURN ENCODE(DIGEST(ENCODE(DIGEST($1, 'md5'), 'hex'), 'sha1'), 'hex'); END; $_$LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION uuid() RETURNS character(36) AS $_$ SELECT SUBSTRING(x.my_rand FROM 1 FOR 8)||'-'||SUBSTRING(x.my_rand FROM 9 FOR 4)||'-4'||SUBSTRING(x.my_rand FROM 13 FOR 3)||'-'||x.clock_1||SUBSTRING(x.my_rand FROM 16 FOR 3)||'-'||SUBSTRING(x.my_rand FROM 19 FOR 12) FROM (SELECT sha1(''||now()||random()) as my_rand, to_hex(8+(3*random())::int) as clock_1) as x;$_$ LANGUAGE SQL;