PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso generare una stringa univoca per record in una tabella in Postgres?

Non sostengo che quanto segue sia efficiente, ma è il modo in cui abbiamo fatto questo genere di cose in passato.

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() può essere utilizzato come predefinito per una colonna in my_table . Qualcosa come:

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

md5(''||now()::text||random()::text) può essere regolato a piacere. Potresti considerare encode(...,'base64') tranne per il fatto che alcuni dei caratteri utilizzati in base-64 non sono compatibili con gli URL.