2011-01-23 16 views
11

Tengo un encantador servidor PostgreSQL 9.0 instalado en mi computadora portátil a través de MacPorts. Me gustaría habilitar el hstore module, pero no puedo encontrar instrucciones para instalar estos módulos opcionales (ni puedo encontrar ningún código relacionado con hstore en /opt/local/share/postgresql90/contrib/).¿Cómo instalo el módulo hstore en PostgreSQL 9.0 (instalación de MacPorts)?

que tienen encuentran algunos relacionados con SQL hstore-here, pero no estoy seguro de dónde viene o si es compatible w/PostgreSQL 9.0.

Entonces, ¿cómo habilito el módulo hstore en mi servidor Postgres 9.0 instalado en MacPorts?

+0

La respuesta de Checkout @ rpkelly a continuación, es la más simple y completa. –

Respuesta

20

Se puede decir MacPorts para construir hstore. Así es cómo.

Si ya tiene postgresql instalado, primero tendrá que desinstalarlo (esto no tocará sus datos o usuarios) porque la acción install no volverá a instalar un puerto ya instalado. La desinstalación es forzada (-f) porque postgresql91-server es dependiente y evitará la desinstalación.

 
sudo port -f uninstall postgresql91 

Editar la portfile y añadir hstore a la lista en la línea que comienza con set contribs:

 
sudo port edit postgresql91 

(Re) instalar desde el código fuente de forma explícita (-s) para construir la extensión hstore:

 
sudo port -s install postgresql91 

A continuación, cargue hstore, una vez para cada una de sus bases de datos en las que desea usarlo:

En> = 9.1: CREATE EXTENSION hstore;

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

cuenta que este proceso funcione para postgresql92 con sólo la sustitución de "92" a "91".

+0

Estas son las mejores/más simples instrucciones. @rpkelly: Los edité para que incluyeran primero la desinstalación, lo cual era necesario en mi configuración (y no agrega ningún paso ni sobrecarga, por lo que parece una apuesta segura). –

+2

¡Tenga en cuenta ** una vez para cada una de sus bases de datos **! –

+0

Funciona para cualquier extensión que no esté incluida como xml2 –

1

No puedo decir para MacOS (o lo que sea MacPorts es), pero en Windows hay un archivo "hstore.sql" en compartir/contrib y hace referencia a una biblioteca "hstore.dll" que es parte de la regular distribución.

Esto se incluyó en el instalador de un clic de EnterpriseDB. Supongo que el instalador de un solo clic para MacOS incluye dicho módulo así:

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

+0

Podría intentar usar el instalador de EnterpriseDB. Parece que no puedo encontrarlo en la distribución de MacPorts. –

+0

No sé si MacOS es binario compatible con esa cosa MacPort, pero hay una versión "zip" del paquete EnterpriseDB. Contiene un archivo hstore.so y el script .sql necesario. Puede obtenerlo desde aquí: http://www.enterprisedb.com/products-services-training/pgbindownload –

+0

Lo sentimos, MacPorts es un administrador de paquetes de terceros común para el lado Unixy de MacOS (primo cercano del proyecto de puertos BSD) , Creo). Probablemente binario compatible. Lo comprobaré. –

1
solución de

Joey Adam es correcta, pero se ha vuelto un poco anticuado, con Postgres 9.1:

hice lo siguiente manera diferente a su mensaje:

  • en lugar de utilizar postgresql-server-devel, me encontré con 'sudo port instalar postgresql91-servidor' (el primero ha sido sustituido por el último)
  • El Makefile en contrib/hstore se ha actualizado para usar PGXS (se ve básicamente igual que Joey publicado anteriormente); No tuve que editarlo.
  • Sí, hice un enlace simbólico a/somewhere/in/my/path/pg_config>/opt/local/lib/postgresql91/bin/pg_config, para que el Makefile tuviera éxito (se espera que pg_config esté en su camino))
  • 9.1 tiene una forma diferente de manejar extensiones como hstore; por ejemplo, para permitir hstore, hice psql91 [mi_esquema], entonces> crear extensión hstore (puedes leer más aquí sobre las extensiones de http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html)
+0

Gracias. No tengo 9.1 para probar, pero esta es información importante. –

+0

Actualización: en un Mac, simplemente instalo desde la fuente. Funciona, es fácil, y tengo el control total y no tengo que encontrar la manera de empujar el puerto para darme lo que necesito. – sethcall

5

Parece que el puerto para PostgreSQL 9.1 ahora incluye hstore, pero todavía necesita ser habilitado Instale e inicie la base de datos normalmente.

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 

EDITAR: La instalación en otra computadora no funcionó tan bien. El hstore no se instaló con la base (puedo haberlo puesto a prueba con otras soluciones). Así que hacer esto antes de la orden de carga por encima:

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 

Para habilitar la extensión hstore, utilizar el nuevo comando SQL "crear extensión" en la base de datos (s) que va a utilizar hstore. Si lo instala en la base de datos template1, todas las bases de datos creadas posteriormente tendrán la extensión hstore.

psql template1 postgres 
template1=# create extension hstore; 

Si sólo necesita la extensión en una base de datos concreta:

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) 
Cuestiones relacionadas