Domanda

Se si collega a un server pgAdminIII 9.x PostgreSQL, troverete due cataloghi esposte nell'interfaccia utente: ANSI (schema di informazioni), e PostgreSQL (pg_catalog).

Sto cercando la documentazione che descrive la mappatura tra

  • oggetti di database e le tabelle di sistema
  • le tabelle di sistema e le viste INFORMATION_SCHEMA

Per esempio, mi piacerebbe essere in grado di prendere un nome di sequenza da un database, ed essere in grado di dire rapidamente in cui la sequenza stessa, il nome della sequenza e l'ACL del sequenza (da dichiarazioni concedere e revocare) sarebbero trovato in entrambe le tabelle di sistema e le viste INFORMATION_SCHEMA.

È che documentato da nessuna parte? Ho passato la documentazione in linea di PostgreSQL, e ho trovato i dettagli di entrambi i ANSI e PostgreSQL cataloghi, ma io non ho trovato la documentazione delle mappature.

Aggiorna

Sembra che l'informazione è probabilmente nel file di origine information_schema.sql, ma questo file non sembra essere nel codice sorgente in linea. (Si veda, per esempio, initdb.c a http://doxygen.postgresql.org/ .)

È stato utile?

Soluzione

Le tabelle di sistema sono la realizzazione di oggetti di database. Quindi, se, per esempio, richiamare una funzione foo(), gli sguardi DBMS in pg_proc per vedere se c'è una funzione di foo e quali gli argomenti e il codice sorgente e così via sono. La disposizione e la disposizione dei cataloghi di sistema sono solo il modo in cui implementatori di varie caratteristiche nel tempo le rese. È già sottolineato la documentazione dei cataloghi. In molti casi, c'è una mappatura semplice, per esempio, tra una funzione e pg_proc. Ma in altri casi, come ad esempio per un indice, è un po 'più complicato. Si dovrà scavare quelle informazioni fuori della documentazione o forse tanti esempi di catalogo di sistema query che volano intorno.

Lo schema informazioni è specificato dallo standard SQL. Il principio non v'è, se si immette questi comandi DDL, quindi una query dello schema informazioni dovrebbe dare questi risultati. In molti casi, non v'è ancora una volta una semplice mappatura tra oggetti e punti di vista degli schemi delle informazioni, ma non è semplice in tutti i casi. Quindi, il mantenimento di una documentazione specifica della mappatura di queste informazioni sarebbe ingombrante e probabilmente inutile. Il principio è DDL in, schema di informazioni di fuori, non ciò che accade nei cataloghi di sistema PostgreSQL.

In definitiva, se volete sapere se una sequenza sarebbe trovato in una tabella catalogo o una vista informazioni sullo schema, è necessario interrogare queste tabelle. La realtà è troppo complicato per questo di essere più semplice. (Credo. Invia una patch se hai un'idea migliore.)

Altri suggerimenti

Poiché la maggior parte dello schema informazioni è sotto forma di punti di vista contro pg_catalog è possibile ottenere una grossa fetta di esso utilizzando psql:

psql -U postgres -c "\d information_schema.*" > information_schema.sql
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top