sql >> Database >  >> RDS >> PostgreSQL

Hoe uuids zonder streepjes te genereren

Hier is een werkende oplossing om iets te bereiken dat dicht in de buurt komt van wat u vraagt:

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

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

MAAR (en het is een grote maar ) hier converteren we uuid naar een string dat betekent dat de index zelf veel duurder zal zijn dan een getal of een echte uuid .

In dit artikel vind je een goede uitleg:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

Voor zover ik weet, Postgres' uuid gebruikt koppeltekens, zelfs als u ze probeert te verwijderen:

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

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

Het bovenstaande voorbeeld werkt prima in Postgres 9.6, maar als we teruggaan naar uuid koppeltekens worden terug toegevoegd.




  1. SQL Server-lus - hoe loop ik door een set records?

  2. Hoe krijg ik de automatisch verhoogde PK uit de Oracle-database?

  3. Laravel 5 - Elequent GROUP BY mislukt

  4. Oracle:een IPv4-adres converteren naar een nummer?