2011-01-23 126 views
11

我有一台可爱的PostgreSQL 9.0服务器,通过MacPorts安装在我的笔记本电脑上。我想启用hstore module,但我找不到任何安装这些可选模块的说明(我也不能在/opt/local/share/postgresql90/contrib/中找到任何与hstore相关的代码)。如何在PostgreSQL 9.0(MacPorts安装)上安装hstore模块?

发现了一些hstore相关的SQL here,但我不知道它来自哪里或者是否兼容W/PostgreSQL的9.0。

那么,如何在MacPorts安装的Postgres 9.0服务器上启用hstore模块?

+0

Checkout @ rpkelly的答案在下面,它是最简单和最完整的。 – 2012-04-23 03:09:49

回答

20

你可以告诉MacPorts的建立hstore。就是这样。

如果您已安装postgresql,则需要先卸载它(这不会触及您的数据或用户),因为install操作不会重新安装已安装的端口。强制卸载(-f),因为postgresql91-server是相关的,并且会阻止卸载。

 
sudo port -f uninstall postgresql91 

编辑Portfile并添加hstore就行列表与set contribs开始:

 
sudo port edit postgresql91 

(再)从源代码安装明确(-s)建hstore扩展:

 
sudo port -s install postgresql91 

然后为您要使用它的每个数据库加载一次hstore:

在> = 9.1:CREATE EXTENSION hstore;

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

注意该过程通过只代以 “92” 为 “91” 适用于postgresql92。

1

我不能说MacOS(或任何MacPorts是),但在Windows上有一个文件“hstore.sql”在共享/ contrib,它引用一个库“hstore.dll”,这是一部分的常规分配。

这包含在EnterpriseDB的一键安装程序中。我会假设,适用于MacOS的点击安装程序包括该模块以及:

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

+0

我可能会尝试使用EnterpriseDB安装程序。我似乎无法在MacPorts发行版中找到它。 – 2011-01-23 22:11:13

+0

我不知道MacOS是否与MacPort的二进制兼容,但是有一个“Zip”版本的EnterpriseDB软件包。它包含一个hstore.so文件和必需的.sql脚本。您可以从这里获得:http://www.enterprisedb.com/products-services-training/pgbindownload – 2011-01-23 22:41:20

+0

对不起,MacPorts是MacOS Unixy方面常见的第三方软件包管理器(与BSD端口项目密切相关, 我相信)。可能是二进制兼容的。我会检查出来的。 – 2011-01-24 00:59:10

1

乔伊亚当的解决方案是正确的,但已经变得稍微在Postgres 9.1日期:

我做了不同于以下他的职位:

  • 而是使用PostgreSQL服务器-devel的,我跑了 'sudo的港口安装postgresql91服务器'(前者已取代后者)
  • 在contrib/hstore中的Makefile已更新为使用PGXS(它看起来基本上就像乔伊上面所述);我不必编辑它。
  • 我做了一个sym连接,并在/ my/path/pg_config>/opt/local/lib/postgresql91/bin/pg_config中创建了一个sym链接,以便Makefile成功(它希望在你的路径中使用pg_config )
  • 9.1有不同的处理扩展名的方法,比如hstore;例如,使hstore,我做psql91 [my_schema],然后>创建扩展hstore(你可以在这里阅读更多关于扩展http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html
5

看来,口对PostgreSQL 9.1现在包括hstore,但它仍然需要启用。正常安装并启动数据库。

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 

编辑:在另一台计算机安装也没有工作。 hstore没有安装基础(我可能试过其他解决方案)。所以做这个上面负载命令之前:

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 

要启用hstore扩展,数据库中的()你将使用hstore使用新的“创建扩展” SQL命令。如果将其安装到template1数据库中,则后来创建的所有数据库都将具有hstore扩展名。

psql template1 postgres 
template1=# create extension hstore; 

如果你只需要在一个特定的数据库扩展:

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)