如何在PostgreSQL 9.0(MacPorts安装)上安装hstore模块?

时间:2011-01-23 21:17:20

标签: postgresql module install macports

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

已经找到了一些与hstore相关的SQL here,但我不知道它来自哪里,或者它是否与PostgreSQL 9.0兼容。

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

4 个答案:

答案 0 :(得分:20)

您可以告诉MacPorts构建hstore。这是怎么回事。

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

sudo port -f uninstall postgresql91

编辑端口文件,并将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

请注意,此过程适用于postgresql92,只需将“92”替换为“91”。

答案 1 :(得分: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的数据库中使用新的“create extension”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)

答案 2 :(得分:1)

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

这包含在EnterpriseDB的一键安装程序中。我假设MacOS的单击安装程序也包含该模块:

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

答案 3 :(得分:1)

Joey Adam的解决方案是正确的,但与postgres 9.1相比已经过时了:

我做了以下不同于他的帖子:

  • 我没有使用postgresql-server-devel,而是运行'sudo port install postgresql91-server'(前者已被后者取代)
  • contrib / hstore中的Makefile已更新为使用PGXS(它看起来基本上就像上面发布的Joey一样);我没有编辑它。
  • 我确实继续将/ sym链接到/ my / path / pg_config>中的/ somewhere / / opt / local / lib / postgresql91 / bin / pg_config,以便Makefile成功(它希望你的路径中有pg_config)
  • 9.1有一种不同的处理扩展方式,如hstore;例如,为了启用hstore,我做了psql91 [my_schema],然后是>创建扩展名hstore(您可以在此处阅读有关扩展名http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html
  • 的更多信息