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

So generieren Sie UUIDs ohne Bindestriche

Hier ist eine funktionierende Lösung, um etwas zu erreichen, das dem entspricht, was Sie verlangen:

CREATE TABLE foo (
  ts TIMESTAMP WITH TIME ZONE,
  uuid VARCHAR DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )
); 

INSERT INTO foo ( ts ) VALUES ( now() );

ABER (und es ist ein großes Aber ) hier konvertieren wir uuid zu einem string das bedeutet, dass der Index selbst viel teurer sein wird als eine Zahl oder eine echte uuid .

In diesem Artikel finden Sie eine gute Erklärung:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

Soweit ich weiß, Postgres' uuid verwendet Bindestriche, auch wenn Sie versuchen, sie zu entfernen:

CREATE TABLE foo (
  ts TIMESTAMP WITH TIME ZONE,
  queue UUID DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )::uuid,
);

INSERT INTO foo ( ts ) VALUES ( now() );

Das obige Beispiel funktioniert in Postgres 9.6 einwandfrei, aber wenn wir auf uuid zurücksetzen Bindestriche werden wieder hinzugefügt.