Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Tipi di Dato > Tipi identificatori di oggetto
PrecedenteComposite TypesPseudo-tipiSuccessivo

8.16. Tipi identificatori di oggetto

Gli identificatori di oggetto (OIDs) sono usati internamente da PostgreSQL™ come chiavi primarie per diverse tabelle di sistema. Gli OID non vengono aggiunti alle tabelle create dagli utenti, a meno che sia stato specificato WITH OIDS quando è stata creata la tabella, o sia stata abilitata la variabile di configurazione default_with_oids. I tipi oid rappresentano un identificatore di oggetti. Ci sono anche diversi alias per i tipi oid: regproc, regprocedure, regoper, regoperator, regclass, regtype, regconfig, e regdictionary. La Tabella 8.23, «Tipi identificatori di oggetto» ne mostra una veduta d'insieme.

Il tipo oid attualmente è implementato come un intero di quattro byte senza segno. Per cui, non è abbastanza grande da fornire l'unicità nell'intero database in database di grandi dimensioni, o anche in grandi tabelle individuali. Per cui, usare una colonna OID come chiave primaria, in una tabella creata dall'utente, è sconsigliato. Gli OID sono usati al meglio solo per riferimenti alle tabelle di sistema.

Il tipo oid stesso ha poche altre operazioni oltre al confronto. Esso può, tuttavia, essere convertito a intero e quindi manipolato usando gli operatori standard degli interi. (Attenzione alla possibile confusione nella conversione da con segno a senza segno se si esegue questa operazione).

I tipi alias OID non hanno loro proprie operazioni tranne che per routine specializzate di input e output. Queste routine sono in grado di accettare e visualizzare nomi simbolici per oggetti di sistema, oltre che il valore numerico grezzo utilizzato dal tipo oid. I tipi alias consentono la ricerca semplificata di valori OID per gli oggetti. Per esempio, per esaminare il pg_attribute delle righe relative a una tabella mytable, è possibile scrivere:

SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass;

piuttosto che:

SELECT * FROM pg_attribute
  WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'mytable');

While that doesn't look all that bad by itself, it's still oversimplified. A far more complicated sub-select would be needed to select the right OID if there are multiple tables named mytable in different schemas. The regclass input converter handles the table lookup according to the schema path setting, and so it does the «right thing» automatically. Similarly, casting a table's OID to regclass is handy for symbolic display of a numeric OID.

[Nota]

Nota

Nota per il revisore: da rivedere !!!

Mentre non sembra vedere il peggio di se stesso, è comunque ultra semplificato. Una vasta e complicata sub-select sarebbe necessaria per selezionare il giusto OID se ci sono più tabelle chiamate mytable in differenti schemi. Il convertitore in input a regclass gestisce la ricerca di tabelle secondo l'impostazione del percorso di schema, e così fa la «cosa giusta» automaticamente. Similmente, convertire un OID di tabella a regclass è utile per la visualizzazione simbolica di un UID numerico.

Tabella 8.23. Tipi identificatori di oggetto

NomeRiferimentiDescrizioneEsempio di valori
oidqualsiasiidentificatori numerico di oggetto564182
regprocpg_procnome di funzionesum
regprocedurepg_proctipi funzione con argomentosum(int4)
regoperpg_operatornome operatore+
regoperatorpg_operatortipi operatore con argomento*(integer,integer) or -(NONE,integer)
regclasspg_classnome relazionepg_type
regtypepg_typenome tipo datointeger
regconfigpg_ts_configconfigurazione ricerca testoenglish
regdictionarypg_ts_dictdizionario ricerca testosimple

Tutti i tipi alias di OID accettano nomi qualificati da schema, e visualizzano in output nomi qualificati da schema se l'oggetto non viene trovato nel percorso di ricerca corrente senza essere qualificato. I tipi alias regproc e regoper accettano solo nomi in input che sono unique (non sovraccaricati), per cui essi sono di uso limitato; per la maggior parte degli usi sono più adatti regprocedure o regoperator. Per regoperator, gli operatori costituiti da un solo elemento (unari) sono identificati scrivendo NONE per l'operando non usato.

Una proprietà supplementare dei tipi alias di OID è la creazione di dipendenze. Se una costante di uno di questi tipi compare in una espressione memorizzata (tipo una espressione o vista di default di colonna), essi creano una dipendenza dall'oggetto referenziato. Per esempio, se una colonna ha una espressione di default nextval('my_seq'::regclass), PostgreSQL™ capisce che l'espressione predefinita dipende dalla sequenza my_seq; Il sistema non lascerà che la sequenza venga eliminata senza che sia rimossa prima l'espressione di default.

Un altro tipo di identificatore usato dal sistema è xid, o identificatore di transazione (abbreviato xact). Questo è il tipo di dato delle colonne di sistema xmin e xmax. Gli identificatori di transazione sono quantità a 32 bit.

Un terzo tipo di identificatore usato dal sistema è cid, o identificatore di comando. Questo è il tipo dato delle colonne di sistema cmin e cmax.Gli identificatori di comando sono anch'essi a 32 bit.

Infine, un tipo di identificatore usato dal sistema è tid, o identificatore di tupla (identificatore di riga). Questo è il tipo di dato per la colonna di sistema ctid. Un ID di tupla è una coppia (numero blocco, indice di tupla nel blocco) che identifica la locazione fisica della riga dentro la tabella.

(Le colonne di sistema vengono ulteriormente spiegate in Sezione 5.4, «Colonne di Sistema»).

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Tipi di Dato > Tipi identificatori di oggetto
PrecedenteComposite TypesPseudo-tipiSuccessivo