sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man genererar uuids utan bindestreck

Här är en fungerande lösning för att uppnå något som ligger nära det du frågar efter:

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

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

MEN (och det är ett stort men ) här konverterar vi uuid till en string det betyder att själva indexet blir mycket dyrare än ett nummer eller en riktig uuid .

I den här artikeln kan du hitta en bra förklaring:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

Så vitt jag vet, Postgres uuid använder bindestreck även om du försöker ta bort dem:

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

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

Exemplet ovan fungerar alldeles utmärkt i Postgres 9.6, men när vi castar tillbaka till uuid bindestreck läggs tillbaka.




  1. Hur man importerar en excel-fil till en MySQL-databas

  2. Hur man snabbar på massinsättning till MS SQL Server med pyodbc

  3. SQLAlchemy SELECT WITH sats/sats (pgsql)

  4. LDAP:Tom binddn och Autentiseringstyp blir enkel från ingen