2015-11-05 28 views
9

Mi piacerebbe utilizzare UUID come identificatore, fornire le prime 8 cifre per scoprire se esiste nel database.Come interrogare UUID per postgres

normalmente posso fare questo senza un problema:

select * from TABLE where id = 'e99aec55-9e32-4c84-aed2-4a0251584941'::uuid

ma questo mi dà errore:

select * from TABLE where id LIKE 'e99aec55%@'::uuid

errore:

ERROR: invalid input syntax for uuid: "e99aec55%@" 
LINE 1: select * from TABLE where id LIKE 'e99aec55... 
              ^
Query failed 
PostgreSQL said: invalid input syntax for uuid: "e99aec55%@" 

Esiste un modo per interrogare prima n cifre f o un tipo UUID in postgresql?

risposta

8

Dal momento che si sta cercando le più alte punte di uuid s, si può effettivamente utilizzare between (perché uuid confronto è ben definito in PostgreSQL):

... 
where some_uuid between 'e99aec55-0000-0000-0000-000000000000' 
        and 'e99aec55-ffff-ffff-ffff-ffffffffffff' 
+0

Questo è fantastico! Stavo pensando di creare un tavolo con uuid e una stringa di uuid in modo da utilizzare la normale ricerca. ma i tuoi metodi funzionano molto bene. Grazie! –

+0

Conoscete le prestazioni di Postgresql quando utilizzate questo confronto di tipo? –

+0

@ZitaoXiong in realtà usa un semplice btree (dovrebbe essere leggermente più veloce rispetto al confronto di 'text's, ma questo dipende da molte cose). – pozs

4

Gli UUID non vengono memorizzati come stringhe in Postrges, ma vengono memorizzati come valori binari lunghi da 16 byte. Quindi, l'unico modo per interrogarlo nel modo desiderato è convertirlo inizialmente in stringa, ma le prestazioni di tale conversione saranno peggiori del semplice confronto delle uguaglianze.

Inoltre sarà necessario mantenere un indice su quella rappresentazione di stringa degli UUID, quindi non ha senso.

+0

ha senso, ma mi piacerebbe implementare qualcosa come i brevi caratteri di Git di SHA in postgresql. qualcosa del genere: [link] (http://stackoverflow.com/questions/18134627/how-much-of-a-git-sha-is-generally-considered-necessario-a-un-quisito-identificare-a) –

+1

pozzo quindi, è sufficiente memorizzare il prefisso come stringa interger/esadecimale codificata in un'altra colonna o utilizzare la soluzione proposta da pozs. –

Problemi correlati