sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu vygenerovat jedinečný řetězec na záznam v tabulce v Postgres?

Netvrdím, že následující je efektivní, ale takhle jsme to dělali v minulosti.

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() lze použít jako výchozí pro sloupec v my_table . Něco jako:

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

md5(''||now()::text||random()::text) lze upravit podle chuti. Můžete zvážit encode(...,'base64') kromě toho, že některé znaky používané v base-64 nejsou vhodné pro URL.



  1. Dialekt musí být explicitně poskytnut od verze 4.0.0

  2. CONVERT() vs TRY_CONVERT v SQL Server:Jaký je rozdíl?

  3. Proč je trvání pro opakující se událost v Androidu NULL?

  4. Základy SQL Serveru Příkaz ALTER TABLE