Qualcuno sa come trovare l'OID di una tabella in Postgres 9.1? Sto scrivendo uno script di aggiornamento che deve verificare l'esistenza di una colonna in una tabella prima di provare a creare la colonna. Questo serve a prevenire l'esecuzione dello script dopo il primo dall'errore.Determinare l'OID di una tabella in Postgres 9.1?
risposta
La tabella di catalogo postgres pg_class
è ciò che si dovrebbe guardare. Dovrebbe esserci una riga per tabella, con il nome della tabella nella colonna relname
e l'oid nella colonna nascosta oid
.
Le tabelle di catalogo si trovano nel database postgres
, quindi assicuratevi di collegarvi a questo, piuttosto che al database dell'applicazione.
Potrebbe interessarti anche la tabella di catalogo pg_attribute
, che include una riga per colonna di tabella.
See: http://www.postgresql.org/docs/current/static/catalog-pg-class.html e http://www.postgresql.org/docs/current/static/catalog-pg-attribute.html
C'è un modo semplice per ottenere un tavolo OID. Precipitava sulla object-identifier classregclass
(mentre è collegato al rispettivo DB):
SELECT 'mytbl'::regclass::oid;
Il valore predefinito per il primo schema nel search_path
o solleva un'eccezione se non trovato.
o schema-qualificare esplicitamente:
SELECT 'myschema.mytbl'::regclass::oid;
allora dovete solo di ispezionare tabella di catalogo pg_attribute
per l'esistenza della colonna:
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)
In Postgres 9.4 o poi si può anche utilizzare to_regclass('mytbl')
, che non genera un'eccezione se la tabella non viene trovata:
Giusto per completare le possibilità mi piacerebbe aggiungere che esiste una sintassi per l'eliminazione di colonne in modo da nessun errore out:
ALTER TABLE MyTbl GOCCIA colonna se ESISTE mycol
Vedi http://www.postgresql.org/docs/9.0/static/sql-altertable.html
Quindi è possibile aggiungere la colonna in modo sicuro.
SELECT oid FROM pg_class WHERE relname = 'tbl_name' AND relkind = 'r';
La spiegazione sarebbe carina ... – eirikir
- 1. Postgres 9.1 CONCESSIONE non funziona
- 2. Query concede una tabella in postgres
- 3. Ordine di join tabella in postgres
- 4. Creazione di una tabella in modalità utente singolo in postgres
- 5. Come stimare la dimensione di una colonna in una tabella Postgres?
- 6. postgres "ritorni tabella" restituisce una stringa
- 7. Selezionare riga casuale per ogni gruppo in una tabella postgres
- 8. Come può una funzione memorizzata Postgres restituire una tabella
- 9. Postgres pg_toast in autovacuum - quale tabella?
- 10. ALTER TABLE, imposta null nella colonna not null, PostgreSQL 9.1
- 11. limitazione di array_agg in Postgresql 9.1
- 12. come utilizzare il tipo di dati di geometria nella tabella di Postgres?
- 13. tabella di aggiornamento con limite e offset in postgres
- 14. Interrogazione efficiente della tabella Postgres multi-partizione
- 15. Come posso generare una stringa univoca per record in una tabella in Postgres?
- 16. Esiste una costante MAX_INT in Postgres?
- 17. Come determinare MAXSIZE di spazio tabella
- 18. Unisciti alla tabella postgres su due colonne?
- 19. Contenitore Docker per Postgres 9.1 che non espone la porta 5432 all'host
- 20. Come si converte un carattere in numero intero in una funzione di PostgreSQL (9.1)?
- 21. Come scrivere DataFrame nella tabella Postgres?
- 22. Come posso impedire a Postgres di inlining di una subquery?
- 23. Come "nome" di una query in postgres
- 24. Postgres che crea una tabella temporanea locale (in interruzione del commit) da una stringa sql dinamica
- 25. Come aggiungere una nuova colonna in una tabella dopo la 2a o 3a colonna nella tabella usando postgres?
- 26. L'aggiunta di una colonna nulla a una tabella Postgres causa un blocco?
- 27. Come creare un backup di una singola tabella in un database postgres?
- 28. Postgres restituisce [null] invece di [] per array_agg della tabella join
- 29. Come posso determinare il numero di pagina di una tabella in MS Word Macro?
- 30. Converti la data in anno di Postgres in Postgres
avevo visto la documentazione sulla '' pg_class' e tavoli pg_attribute', ma non sapevo che ci fosse una colonna nascosta denominata 'oid' nella tabella' pg_class'. Non riuscivo a capire da dove provenisse l'oid dei documenti. Grazie! –
Questo non è abbastanza preciso. Ogni database ha uno schema chiamato 'pg_catalog', che contiene tabelle di catalogo specifiche per il database. –
I second @TonyVitabile. Era la colonna nascosta 'oid' che stavo cercando. –