PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich eine eindeutige Zeichenfolge pro Datensatz in einer Tabelle in Postgres generieren?

Ich behaupte nicht, dass das Folgende effizient ist, aber so haben wir das in der Vergangenheit gemacht.

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() kann als Standard für eine Spalte in my_table verwendet werden . Etwas wie:

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

md5(''||now()::text||random()::text) kann nach Geschmack angepasst werden. Sie könnten encode(...,'base64') in Betracht ziehen außer dass einige der in Base-64 verwendeten Zeichen nicht URL-freundlich sind.