2011-01-23 6 views
11

Ho un delizioso server PostgreSQL 9.0 installato sul mio laptop tramite MacPorts. Vorrei abilitare lo hstore module, ma non riesco a trovare alcuna istruzione per l'installazione di questi moduli opzionali (né posso trovare alcun codice relativo a hstore in /opt/local/share/postgresql90/contrib/).Come installare il modulo hstore su PostgreSQL 9.0 (installazione MacPorts)?

ho hanno trovato un po 'di SQL hstore legati here, ma non sono sicuro da dove viene o se è compatibile w/PostgreSQL 9.0.

Quindi, come abilitare il modulo hstore sul mio server Postgres 9.0 installato su MacPorts?

+0

Acquista la risposta di @ rpkelly qui sotto, è la più semplice e completa. –

risposta

20

Si può dire MacPorts per costruire hstore. Ecco come.

Se è già installato postgresql, sarà necessario disinstallarlo prima (questo non toccherà i dati o gli utenti) perché l'azione install non reinstallerà una porta già installata. La disinstallazione è forzata (-f) perché postgresql91-server dipende e impedirà la disinstallazione.

 
sudo port -f uninstall postgresql91 

Modificare il Portfile e aggiungere hstore alla lista sulla linea che inizia con set contribs:

 
sudo port edit postgresql91 

(Re) installare da fonte esplicitamente (-s) per costruire l'estensione hstore:

 
sudo port -s install postgresql91 

Quindi caricare hstore, una volta per ciascuno dei database in cui si desidera utilizzarlo:

nel> = 9.1: CREATE EXTENSION hstore;

In 9.0: psql -U postgres -f /opt/local/share/postgresql90/contrib/hstore.sql

Nota questo processo funziona per postgresql92 semplicemente sostituendo "92" per "91".

+0

Queste sono le istruzioni migliori/più semplici. @ rpkelly: li ho modificati per includere prima la disinstallazione, che era necessaria nel mio setup (e non aggiunge passaggi o overhead quindi sembra una scommessa sicura). –

+2

Nota ** una volta per ciascuno dei tuoi database **! –

+0

Funziona con qualsiasi estensione che non sia già inclusa come xml2 –

1

Non posso dire per MacOS (o qualunque sia MacPorts), ma su Windows c'è un file "hstore.sql" in share/contrib e fa riferimento a una libreria "hstore.dll" che fa parte del normale distribuzione.

Questo è stato incluso nel programma di installazione one-click da EnterpriseDB. Parto dal presupposto che il programma di installazione un clic per MacOS include quel modulo così:

http://www.enterprisedb.com/products-services-training/pgdownload#osx

+0

Potrei provare a utilizzare il programma di installazione di EnterpriseDB. Non riesco a trovarlo nella distribuzione MacPorts. –

+0

Non so se MacOS è compatibile binario con quella cosa MacPort, ma esiste una versione "zip" del pacchetto EnterpriseDB. Contiene un file hstore.so e lo script .sql necessario. Puoi ottenerlo da qui: http://www.enterprisedb.com/products-services-training/pgbindownload –

+0

Scusa, MacPorts è un gestore di pacchetti di terze parti comune per il lato Unix di MacOS (cugino vicino al progetto di porte BSD , Credo). Probabilmente compatibile binario. Lo guarderò. –

1
soluzione

Joey Adam è corretto, ma è diventato un po 'datato con Postgres 9.1:

Ho fatto la seguente modo diverso da il suo posto:

  • Invece di utilizzare postgresql-server-devel, mi sono imbattuto 'sudo port install postgresql91-server' (il primo è stato sostituito da quest'ultimo)
  • Il Makefile in contrib/hstore è stato aggiornato per usare PGXS (sembra fondamentalmente simile a Joey pubblicato sopra); Non ho dovuto modificarlo.
  • Ho fatto un collegamento simbolico a/da qualche parte/in/mio/percorso/pg_config>/opt/local/lib/postgresql91/bin/pg_config, in modo che il Makefile avrebbe avuto successo (si aspetta pg_config nel tuo percorso
  • 9.1 ha un diverso modo di gestire l'estensione come hstore; per esempio, per abilitare hstore, ho fatto psql91 [my_schema], quindi> creare un'estensione hstore (potete leggere di più qui sulle estensioni http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html)
+0

Grazie. Non ho 9.1 per testare, ma questa è un'informazione importante. Aggiornamento –

+0

: su un Mac, installo solo dal sorgente. Funziona, è facile, e ho il pieno controllo e non devo capire come spingere la porta per darmi quello che mi serve. – sethcall

5

Sembra che la porta per PostgreSQL 9.1 ora include hstore, ma ancora deve essere abilitato. Installa e avvia normalmente il database.

sudo port install postgresql91 postgresql91-server 
sudo mkdir -p /opt/local/var/db/postgresql91/defaultdb 
sudo chown postgres:postgres /opt/local/var/db/postgresql91/defaultdb 
sudo su postgres -c '/opt/local/lib/postgresql91/bin/initdb \ 
    -D /opt/local/var/db/postgresql91/defaultdb' 
sudo port load postgresql91-server 

MODIFICA: l'installazione su un altro computer non ha funzionato bene. L'hstore non è stato installato con la base (avrei potuto renderlo disponibile provando altre soluzioni). Quindi, fare questo prima del comando di carico di cui sopra:

sudo port unload postgresql91-server # if you did load above 
sudo port build postgresql91 
port work postgresql91 # Gives you base dir for following command 
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_databases_postgresql91/postgresql91/work/postgresql-9.1.*/contrib/hstore 
sudo make all 
sudo make install clean 
sudo port load postgresql91-server 

per abilitare l'estensione hstore, utilizzare il nuovo comando SQL "creare estensione" nel database (s) che si intende utilizzare hstore. Se lo si installa nel database template1, tutti i database creati in seguito avranno l'estensione hstore.

psql template1 postgres 
template1=# create extension hstore; 

Se avete solo bisogno l'estensione in un particolare database:

psql dbname dbuser 
dbname=# create extension hstore; 
create table a (id serial, data hstore); 
NOTICE: CREATE TABLE will create implicit sequence "a_id_seq" for serial column "a.id" 
CREATE TABLE 
dbname=# insert into a(data) values('a=>1, b=>2'); 
INSERT 0 1 
dbname=# SELECT * from a; 
id |  data   
----+-------------------- 
    1 | "a"=>"1", "b"=>"2" 
(1 row)