sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik een unieke string per record genereren in een tabel in Postgres?

Ik beweer niet dat het volgende efficiënt is, maar het is hoe we dit soort dingen in het verleden hebben gedaan.

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() kan worden gebruikt als standaard voor een kolom in my_table . Iets als:

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

md5(''||now()::text||random()::text) naar smaak kan worden aangepast. Je zou kunnen overwegen encode(...,'base64') behalve dat sommige tekens die in base-64 worden gebruikt niet URL-vriendelijk zijn.



  1. Meerdere rijen invoegen in mysql

  2. Importeren van en exporteren naar bestanden met behulp van de MySQL-opdrachtregel

  3. Lighty in een notendop

  4. Escape-tekenreeks Python voor MySQL