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

Dav*_*Eyk 12 postgresql install module macports

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

已经发现了一些hstore相关的SQL 这里,但我不知道它来自哪里或者是否兼容W/PostgreSQL的9.0.

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

rpk*_*lly 21

您可以告诉MacPorts构建hstore.这是如何做.

如果您已经postgresql安装,则需要先卸载它(这不会触及您的数据或用户),因为该install操作不会重新安装已安装的端口.卸载是forced(-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"即可.

  • 注意**每个数据库**一次**! (2认同)

All*_*len 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
Run Code Online (Sandbox Code Playgroud)

编辑:在另一台计算机上安装不起作用.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
Run Code Online (Sandbox Code Playgroud)

要启用hstore扩展,请在将使用hstore的数据库中使用新的"create extension"SQL命令.如果将其安装到template1数据库中,则之后创建的所有数据库都将具有hstore扩展名.

psql template1 postgres
template1=# create extension hstore;
Run Code Online (Sandbox Code Playgroud)

如果您只需要特定数据库中的扩展名:

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)
Run Code Online (Sandbox Code Playgroud)