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

Sådan genereres uuids uden bindestreger

Her er en fungerende løsning til at opnå noget tæt på det, du spørger om:

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

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

MEN (og det er et stort men ) her konverterer vi uuid til en string det betyder, at selve indekset vil være meget dyrere end et tal eller en rigtig uuid .

I denne artikel kan du finde en god forklaring:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

Så vidt jeg ved, Postgres' uuid bruger bindestreger, selvom du prøver at fjerne dem:

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

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

Eksemplet ovenfor fungerer fint i Postgres 9.6, men når vi kaster tilbage til uuid bindestreger tilføjes tilbage.




  1. Sådan får du sql WHERE-erklæring automatisk opdatering fra localhost-link

  2. Hvordan sammenkædes alle resultater fra tabelrækken?

  3. ORA-01097

  4. ORA-4031 fejl med Direct NFS