sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo generar una cadena única por registro en una tabla en Postgres?

No pretendo que lo siguiente sea eficiente, pero así es como hemos hecho este tipo de cosas en el pasado.

CREATE FUNCTION make_uid() RETURNS text AS $$
DECLARE
    new_uid text;
    done bool;
BEGIN
    done := false;
    WHILE NOT done LOOP
        new_uid := md5(''||now()::text||random()::text);
        done := NOT exists(SELECT 1 FROM my_table WHERE uid=new_uid);
    END LOOP;
    RETURN new_uid;
END;
$$ LANGUAGE PLPGSQL VOLATILE;

make_uid() se puede usar como valor predeterminado para una columna en my_table . Algo como:

ALTER TABLE my_table ADD COLUMN uid text NOT NULL DEFAULT make_uid();

md5(''||now()::text||random()::text) se puede ajustar al gusto. Podría considerar encode(...,'base64') excepto que algunos de los caracteres usados ​​en base-64 no son compatibles con URL.