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

如何在PostgreSQL 9.0(MacPorts安装)上安装hstore模块?,postgresql,module,installation,macports,Postgresql,Module,Installation,Macports,我的笔记本电脑上通过MacPorts安装了一台可爱的PostgreSQL 9.0服务器。我想启用,但找不到安装这些可选模块的任何说明(在/opt/local/share/postgresql90/contrib/中也找不到任何与hstore相关的代码) 我发现了一些与hstore相关的SQL,但我不确定它来自何处,也不确定它是否与PostgreSQL 9.0兼容 那么,如何在我的MacPorts安装的Postgres 9.0服务器上启用hstore模块呢?我不能说是MacOS(或任何MacPor

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

我发现了一些与hstore相关的SQL,但我不确定它来自何处,也不确定它是否与PostgreSQL 9.0兼容

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

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

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


乔伊·亚当的解决方案是正确的,但与postgres 9.1有点过时:

我做了以下与他的帖子不同的事情:

  • 我没有使用postgresql server devel,而是运行了“sudo port install postgresql91 server”(前者已被后者取代)
  • contrib/hstore中的Makefile已经更新为使用PGXS(它看起来基本上就像上面发布的Joey);我不必编辑它
  • 我确实做了一个sym链接,指向/somewhere/in/my/path/pg_-config>/opt/local/lib/postgresql91/bin/pg_-config,这样Makefile就会成功(它希望在您的路径中有pg_-config)
  • 9.1具有不同的扩展处理方式,如hstore;例如,为了启用hstore,我做了psql91[my_schema],然后>创建扩展hstore(您可以在这里阅读更多关于扩展的内容)

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未随底座一起安装(我可能已尝试其他解决方案使其可用)。因此,请在上面的load命令之前执行此操作:

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的数据库中使用新的“createextension”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)

您可以告诉MacPorts构建hstore。这是怎么做的

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

sudo port -f uninstall postgresql91 (重新)从源代码显式安装(
-s
)以构建hstore扩展:

sudo port -s install postgresql91 sudo端口-s安装postgresql91 然后为每个要使用hstore的数据库加载一次hstore:

在>=9.1中:
创建扩展存储

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


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

我可能会尝试使用EnterpriseDB安装程序。我似乎在MacPorts发行版中找不到它。我不知道MacOS是否与MacPort兼容,但有一个“zip”版本的EnterpriseDB包。它确实包含一个hstore.so文件和必要的.sql脚本。您可以从这里了解到:对不起,MacPorts是MacOS Unixy端的常见第三方软件包管理器(我相信是BSD ports项目的近亲)。可能是二进制兼容的。我去看看。谢谢。我没有9.1要测试,但这是重要的信息。更新:在mac上,我只是从源代码安装。它可以工作,很简单,我可以完全控制,不必想办法通过推送端口来满足我的需要。这些是最好/最简单的说明@rpkelly:我对它们进行了编辑,以包括首先卸载,这在我的设置中是必要的(并且没有添加任何步骤或开销,因此这似乎是一个安全的赌注)。为每个数据库记录一次!适用于任何尚未包含的扩展,如下面xml2Checkout@rpkelly的答案,它是最简单和最完整的。 sudo port -s install postgresql91