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

Il nome della tabella o della colonna non può iniziare con un valore numerico?

Viene dagli standard sql originali, che attraverso diversi livelli di indirizzamento alla fine arrivano a un inizio identificatore block, che è una delle tante cose, ma principalmente è "una semplice lettera latina". Ci sono anche altre cose che possono essere utilizzate, ma se vuoi vedere tutti i dettagli, vai su http://en.wikipedia.org/wiki/SQL-92 e segui i link allo standard attuale ( pagina 85 )

Avere introduttori di identificatori non numerici rende la scrittura di un parser per decodificare sql per l'esecuzione più semplice e veloce, ma va bene anche una forma tra virgolette.

Modifica:perché è più facile per il parser?

Il problema per un parser è più nel SELECT -list clausola rispetto a FROM clausola. L'elenco di selezione è l'elenco delle espressioni selezionate dalle tabelle e questo è molto flessibile, consentendo nomi di colonne semplici ed espressioni numeriche. Considera quanto segue:

SELECT 2e2 + 3.4 FROM ...

Se i nomi delle tabelle e delle colonne possono iniziare con numeri, è 2e2 un nome di colonna o un numero valido (e il formato è generalmente consentito in valori letterali numerici) ed è 3.4 la tabella "3 " e colonna "4 " o è il valore numerico 3.4 ?

Avere la regola che identificativi iniziare con semplici lettere latine (e alcune altre cose specifiche) significa che un parser che vede 2e2 può discernere rapidamente che questa sarà un'espressione numerica, lo stesso vale per 3.4

Sebbene sia possibile escogitare uno schema per consentire caratteri iniziali numerici, ciò potrebbe portare a regole (opinione) ancora più oscure, quindi questa regola è una buona soluzione. Se hai consentito prima le cifre, sarebbe sempre necessario virgolette, il che probabilmente non è "pulito".

Disclaimer , ho semplificato leggermente quanto sopra, ignorando i nomi di correlazione per mantenerlo breve. Non ho piena familiarità con Postgres, ma ho ricontrollato la risposta precedente rispetto alla documentazione Oracle RDB e alle specifiche sql