我的笔记本电脑上安装了一个可爱的PostgreSQL 9.0服务器,通过MacPorts。我想启用hstore module,但我找不到任何安装这些可选模块的说明(我也无法在/opt/local/share/postgresql90/contrib/
中找到任何与hstore相关的代码。)
我已经找到了一些与hstore相关的SQL here,但我不知道它来自哪里,或者它是否与PostgreSQL 9.0兼容。
那么,如何在我的MacPorts安装的Postgres 9.0服务器上启用hstore模块?
答案 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相比已经过时了:
我做了以下不同于他的帖子: