如何在PostgreSQL 9.0(MacPorts安装)上安装hstore模块?
我的笔记本电脑上通过MacPorts安装了一台可爱的PostgreSQL 9.0服务器。我想启用,但找不到安装这些可选模块的任何说明(在如何在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
/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(您可以在这里阅读更多关于扩展的内容)
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