2011-01-23 3 views
11

У меня есть прекрасный сервер PostgreSQL 9.0, установленный на моем ноутбуке через MacPorts. Я хотел бы включить hstore module, но я не могу найти никаких инструкций по установке этих дополнительных модулей (и я не могу найти код, связанный с hstore, в /opt/local/share/postgresql90/contrib/).Как установить модуль hstore на PostgreSQL 9.0 (установка MacPorts)?

Я есть нашел hstore связанных SQL here, но я не уверен, где это происходит из или, если это совместимо ж/PostgreSQL 9.0.

Итак, как включить модуль hstore на установленном MacPorts сервере Postgres 9.0?

+0

Оформить заказ @ rpkelly ответ ниже, это самый простой и самый полный. –

ответ

20

Вы можете сказать, MacPorts построить hstore. Вот как.

Если у вас уже установлено postgresql, вам необходимо сначала его удалить (это не коснется ваших данных или пользователей), потому что действие install не приведет к повторной установке уже установленного порта. Удаление принудительно (-f), потому что postgresql91-server зависит и предотвратит удаление.

 
sudo port -f uninstall postgresql91 

Редактировать Portfile и добавить hstore в список на линии, которая начинается с set contribs:

 
sudo port edit postgresql91 

(Re) установить из источника в явном виде (-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".

+0

Это лучшие/самые простые инструкции. @rpkelly: я редактировал их, чтобы включить удаление, которое было необходимо в моей настройке (и не добавляет никаких шагов или накладных расходов, поэтому кажется, что это безопасная ставка). –

+2

Примечание ** для каждой вашей базы данных **! –

+0

Работает для любого расширения, которое еще не включено, например, xml2 –

1

Я не могу сказать, что для MacOS (или любого другого MacPorts), но в Windows есть файл «hstore.sql» в share/contrib, и он ссылается на библиотеку «hstore.dll», которая является частью обычного распределение.

Это было включено в программу установки одним щелчком мыши из EnterpriseDB. Я бы предположил, что установщик один щелчок для MacOS включает этот модуль, а также:

http://www.enterprisedb.com/products-services-training/pgdownload#osx

+0

Я могу попробовать использовать установщик EnterpriseDB. Я не могу найти его в дистрибутиве MacPorts. –

+0

Я не знаю, совместим ли MacOS с этой версией MacPort, но есть версия пакета EnterpriseDB «zip». Он содержит файл hstore.so и необходимый сценарий .sql. Вы можете получить это отсюда: http://www.enterprisedb.com/products-services-training/pgbindownload –

+0

К сожалению, MacPorts является распространенным сторонним менеджером пакетов для Unixy стороны MacOS (близкий родственник к проекту портов BSD , Я верю). Вероятно, бинарно совместимо. Я проверю это. –

1
решение

Джои Адама правильно, но стала немного датированный Postgres 9.1:

я сделал следующее в отличие от его должность:

  • Вместо использования PostGreSQL-сервера-Devel, я побежал «Судо порт установить postgresql91-сервер» (первый был заменен на последней)
  • Makefile в contrib/hstore был обновлен для использования PGXS (он выглядит в основном так же, как Joey, выше); Мне не пришлось его редактировать.
  • Я сделал и сделаю символическую ссылку на/something/in/my/path/pg_config>/opt/local/lib/postgresql91/bin/pg_config, так что Makefile будет успешным (он ожидает, что pg_config на вашем пути)
  • 9.1 имеет другой способ обработки расширения, такой как hstore; например, для того, чтобы hstore, я psql91 [my_schema], затем> создать расширение hstore (вы можете прочитать больше здесь о расширениях http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html)
+0

Спасибо. У меня нет 9.1 для тестирования, но это важная информация. –

+0

Обновление: на mac, я просто устанавливаю из источника. Это работает, это легко, и у меня есть полный контроль и не нужно выяснять, как нажимать порт, чтобы дать мне то, что мне нужно. – sethcall

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 

EDIT: Установка на другом компьютере также не работает. Хэш не был установлен с базой (я, возможно, сделал это доступным, попробовав другие решения). Так что это перед командой нагрузки выше:

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 использовать новый «создать расширение» команду SQL в базе данных (ы) вы будете использовать hstore. Если вы установите его в базу данных 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) 
Смежные вопросы