sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag generera en unik sträng per post i en tabell i Postgres?

Jag påstår inte att följande är effektivt, men det är hur vi har gjort den här typen av saker tidigare.

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 användas som standard för en kolumn i my_table . Något i stil med:

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

md5(''||now()::text||random()::text) kan anpassas efter smak. Du kan överväga encode(...,'base64') förutom att vissa av tecknen som används i base-64 inte är URL-vänliga.



  1. generera dagar från datumintervall

  2. MySQL PI() Funktion – Returnera värdet av π (pi)

  3. 3 sätt att konvertera ett heltal till decimal i SQL Server

  4. MariaDB JSON_CONTAINS_PATH() Förklarad