如何在PostgreSQL 9.0(MacPorts安装)上安装hstore模块?
我有一台可爱的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模块?
你可以告诉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。
我不能说MacOS(或任何MacPorts是),但在Windows上有一个文件“hstore.sql”在共享/ contrib,它引用一个库“hstore.dll”,这是一部分的常规分配。
这包含在EnterpriseDB的一键安装程序中。我会假设,适用于MacOS的点击安装程序包括该模块以及:
http://www.enterprisedb.com/products-services-training/pgdownload#osx
我可能会尝试使用EnterpriseDB安装程序。我似乎无法在MacPorts发行版中找到它。 – 2011-01-23 22:11:13
我不知道MacOS是否与MacPort的二进制兼容,但是有一个“Zip”版本的EnterpriseDB软件包。它包含一个hstore.so文件和必需的.sql脚本。您可以从这里获得:http://www.enterprisedb.com/products-services-training/pgbindownload – 2011-01-23 22:41:20
对不起,MacPorts是MacOS Unixy方面常见的第三方软件包管理器(与BSD端口项目密切相关, 我相信)。可能是二进制兼容的。我会检查出来的。 – 2011-01-24 00:59:10
乔伊亚当的解决方案是正确的,但已经变得稍微在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)
看来,口对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)
Checkout @ rpkelly的答案在下面,它是最简单和最完整的。 – 2012-04-23 03:09:49