2013-10-02 13 views
7

Sto lavorando a un progetto che deve utilizzare hstore su più schemi. Lo schema "pubblico", in cui è stata installata l'estensione hstore, non è disponibile ovunque, perché il mio ambito non cerca "pubblico". In alcune prove, ho creato l'estensione su uno schema chiamato 'hstore' e ho usato lo schema su ogni ambito disponibile (percorso di ricerca) usato.Il modo migliore per installare hstore su più schemi in un database Postgres?

Sulla base di questo, ho alcune domande:

  • E 'ok per creare uno schema solo per l'estensione? O è meglio creare l'estensione su ogni singolo schema (ad esempio, customer_1, customer_2 e così via ...)?

  • La creazione dell'estensione in uno schema separato influisce sulla posizione in cui sono memorizzati i dati? Sto usando più schemi per rendere più facile il backup/ripristino, e davvero non voglio che pg memorizzi tutti i miei dati hstore in una tabella nascosta (come pg_large_objects per blob) su un singolo schema.

risposta

6

Non è consentito installare estensioni più volte per database. Citando the manual on CREATE EXTENSION:

Ricordate che l'estensione in sé non è considerato all'interno di qualsiasi schema: le estensioni hanno nomi non qualificati che devono essere unico nel suo genere a livello di database . Ma gli oggetti appartenenti all'estensione possono essere all'interno di schemi.

Se non si desidera includere nel vostro publicsearch_path, installare le estensioni "pubblici" in uno schema dedicato (ad esempio: extensions). Vorrei utilizzare un singolo schema per tutti loro, non uno schema separato per ogni estensione. There are quite a few of them. CREATE EXTENSION offre un'opzione per l'installazione di uno schema esistente di vostra scelta:

CREATE EXTENSION hstore SCHEMA extensions; 

e assicurarsi che lo schema è incluso nel search_path di altri utenti che desiderano fare uso di esso.

L'archiviazione dei dati non è influenzato affatto dallo schema l'estensione risiede in.

+0

I 'estensioni 'Lo schema dovrebbe essere aggiunto a search_path, corretto? – Qcom

+1

@ Qcom: corretto. E anche la sequenza di schemi nel search_path è rilevante. * O * è necessario qualificare lo schema per tutti gli oggetti a cui si desidera fare riferimento, inclusi gli operatori! Dettagli: http://stackoverflow.com/questions/22975599/how-to-use-operator-from-the-extension-pg-trgm/22975642#22975642 –

+0

Ci sono alcuni ovvi benefici oltre alla chiarezza nell'installazione di estensioni in un apposito schema piuttosto che usare pubblico? – Qcom

0

Provate a installare l'estensione hstore su tutti gli schemi

create extension hstore schema pg_catalog; 
+0

Non penso che sia una buona idea memorizzare le cose non-core in 'pg_catalog' –

Problemi correlati