PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je générer une chaîne unique par enregistrement dans une table dans Postgres ?

Je ne prétends pas que ce qui suit est efficace, mais c'est ainsi que nous avons fait ce genre de choses dans le passé.

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() peut être utilisé par défaut pour une colonne dans my_table . Quelque chose comme :

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

md5(''||now()::text||random()::text) peut être ajusté au goût. Vous pourriez envisager encode(...,'base64') sauf que certains des caractères utilisés en base 64 ne sont pas compatibles avec les URL.