2015-10-22 19 views
5

Vengo da MySQL e in MySQL è possibile utilizzare AUTOINCREMENT per l'ID univoco di una riga come chiave primaria.Postgresql: UUID o SEQUENCE per chiave primaria?

Trovo che non ci sia AUTOINCREMENT in Postgresql, solo SEQUENCE o UUID. Ho letto da qualche parte che possiamo usare UUID come chiave primaria di un tavolo. Questo ha l'ulteriore vantaggio di mascherare l'id di altri utenti (dato che voglio costruire API che prendono l'ID come parametro). Quale dovrei usare per Postgresql?

risposta

7

Un sequence in PostgreSQL fa esattamente la stessa di AUTOINCREMENT in MySQL. A sequence è più efficiente di un uuid perché è 8 byte invece di 16 per lo uuid. È possibile utilizzare un uuid come chiave primaria, proprio come la maggior parte qualsiasi altro tipo di dati.

Tuttavia, non vedo come questo si riferisca al mascheramento di un ID utente. Se si desidera mascherare l'ID di un determinato utente da altri utenti, è necessario gestire attentamente i privilegi della tabella e/o crittografare l'ID utilizzando, ad esempio, md5().

Se si desidera proteggere un tavolo con dati utente di hacker ficcanaso che cercano di indovinare altri ID, il tipo uuid rappresenta una scelta eccellente. La versione 4 è quindi la scelta migliore in quanto ha 122 bit casuali (gli altri 6 sono utilizzati per l'identificazione della versione). Puoi creare una chiave primaria come questa:

id uuid PRIMARY KEY DEFAULT uuid_generate_v4() 

e quindi non dovrai più preoccuparti di questo.

+0

Non voglio mascherare l'ID di quell'utente, semplicemente non volendo permettere a un utente di "indovinare" l'id di un altro utente (ad esempio l'ID di quell'utente è 154 e sto facendo una richiesta API, si può immaginare che ci siano altri ID utente 153 o 155 e curiosità intorno a una richiesta GET che non richiede un token di accesso) –

+1

A destra. Vedi risposta aggiornata. – Patrick

+0

@Justin: io userei entrambi. Definisci la tua chiave primaria come una 'seriale' e includi una colonna unica 'uuid' da utilizzare per le chiamate API. –

1

È possibile utilizzare l'UUID come chiave primaria nella tabella in quanto sarà univoco. Tuttavia, tieni presente che l'UUID occuperà un po 'più di spazio rispetto a SEQUENCE. E anche loro non sono molto veloci. Ma sì, sono sicuramente unici e quindi ti garantiamo di ottenere dati coerenti.

È possibile anche fare riferimento:

Problemi correlati