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

Hvordan kan jeg generere en unik streng pr. post i en tabel i Postgres?

Jeg påstår ikke, at følgende er effektivt, men det er sådan, vi har gjort den slags tidligere.

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 bruges som standard for en kolonne i my_table . Noget som:

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

md5(''||now()::text||random()::text) kan justeres efter smag. Du kunne overveje encode(...,'base64') bortset fra, at nogle af de tegn, der bruges i base-64, ikke er URL-venlige.



  1. MariaDB JSON_CONTAINS() Forklaret

  2. Indsaml ydeevnedata ved hjælp af SQLDiag Tool | SQL Server Performance Fejlfinding -6

  3. Bestil varchar-streng som numerisk

  4. Percona Live Dublin - Begivenhedsoversigt og vores sessioner