2011-01-23 38 views
11

Tôi có một máy chủ PostgreSQL 9.0 đáng yêu được cài đặt trên máy tính xách tay của tôi thông qua MacPorts. Tôi muốn kích hoạt hstore module, nhưng tôi không thể tìm thấy bất kỳ hướng dẫn nào để cài đặt các mô-đun tùy chọn này (cũng không phải tôi có thể tìm thấy bất kỳ mã liên quan đến hstore nào trong /opt/local/share/postgresql90/contrib/).Làm cách nào để cài đặt mô-đun hstore trên PostgreSQL 9.0 (Cài đặt MacPorts)?

I tìm thấy một số liên quan đến cửa sổ SQL here, nhưng tôi không chắc chắn nó đến từ đâu hoặc nếu nó tương thích với w/PostgreSQL 9.0.

Vì vậy, làm cách nào để kích hoạt mô-đun hstore trên máy chủ Postgres 9.0 được cài đặt MacPorts của tôi?

+0

Trả lời của @ rpkelly dưới đây, đó là câu trả lời đơn giản và đầy đủ nhất. –

Trả lời

20

Bạn có thể nói MacPorts để xây dựng hstore. Đây là cách làm.

Nếu bạn đã cài đặt postgresql, trước tiên bạn sẽ cần phải gỡ cài đặt (điều này sẽ không chạm vào dữ liệu hoặc người dùng của bạn) vì hành động install sẽ không cài đặt lại cổng đã được cài đặt. Việc gỡ cài đặt bị buộc (-f) vì postgresql91-server phụ thuộc và sẽ ngăn gỡ cài đặt.

 
sudo port -f uninstall postgresql91 

Sửa Portfile và thêm hstore vào danh sách trên dòng mà bắt đầu với set contribs:

 
sudo port edit postgresql91 

(Re) cài đặt từ nguồn một cách rõ ràng (-s) để xây dựng mở rộng hstore:

 
sudo port -s install postgresql91 

Sau đó tải hstore, một lần cho từng cơ sở dữ liệu mà bạn muốn sử dụng:

nhập> = 9.1: CREATE EXTENSION hstore;

Trong 9.0: psql -U postgres -f /opt/local/share/postgresql90/contrib/hstore.sql

Lưu ý quá trình này làm việc cho postgresql92 bằng cách chỉ thay thế "92" cho "91".

+0

Đây là những hướng dẫn tốt nhất/đơn giản nhất. @ rpkelly: Tôi đã chỉnh sửa chúng để bao gồm gỡ cài đặt trước tiên, điều này là cần thiết trong quá trình thiết lập của tôi (và không thêm bất kỳ bước hoặc phí nào để có vẻ như đặt cược an toàn). –

+2

Lưu ý ** một lần cho mỗi cơ sở dữ liệu của bạn **! –

+0

Làm việc cho bất kỳ tiện ích mở rộng nào chưa được bao gồm như xml2 –

1

Tôi không thể nói cho MacOS (hoặc bất kỳ MacPorts nào), nhưng trên Windows có tệp "hstore.sql" trong phần/contrib và nó tham chiếu đến thư viện "hstore.dll", một phần của phân phối.

Điều này đã được bao gồm trong trình cài đặt một cú nhấp chuột từ EnterpriseDB. Tôi cho rằng trình cài đặt một cú nhấp chuột cho hệ điều hành MacOS bao gồm rằng mô-đun cũng như:

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

+0

Tôi có thể thử sử dụng trình cài đặt EnterpriseDB. Tôi dường như không thể tìm thấy nó trong phân phối MacPorts. –

+0

Tôi không biết liệu MacOS có tương thích nhị phân với điều MacPort đó không, nhưng có phiên bản "zip" của gói EnterpriseDB. Nó chứa một tệp hstore.so và tập lệnh .sql cần thiết. Bạn có thể tải xuống từ đây: http://www.enterprisedb.com/products-services-training/pgbindownload –

+0

Xin lỗi, MacPorts là một trình quản lý gói bên thứ ba phổ biến cho phía Unixy của MacOS (người anh em họ gần với dự án cổng BSD , Tôi tin). Có lẽ nhị phân tương thích. Tôi sẽ kiểm tra. –

1
giải pháp

Joey của Adam là đúng, nhưng đã trở nên hơi ngày với postgres 9.1:

tôi sau cách khác nhau từ bài của mình:

  • thay vì sử dụng postgresql-server-devel, tôi chạy 'cổng sudo cài đặt postgresql91-server' (trước đây đã được thay thế bởi sau này)
  • Makefile trong contrib/hstore đã được cập nhật để sử dụng PGXS (về cơ bản nó trông giống như Joey đã đăng ở trên); Tôi không phải chỉnh sửa nó.
  • Tôi đã tiếp tục và tạo liên kết sym tới/anywhere/in/my/path/pg_config>/opt/local/lib/postgresql91/bin/pg_config, để Makefile thành công (nó mong đợi pg_config trong đường dẫn của bạn)
  • 9.1 có cách xử lý mở rộng khác như hstore; ví dụ, để cho phép hstore, tôi đã làm psql91 [my_schema], sau đó> tạo mở rộng hstore (bạn có thể đọc ở đây thêm về tiện ích http://developer.postgresql.org/pgdocs/postgres/sql-createextension.html)
+0

Cảm ơn. Tôi không có 9.1 để kiểm tra, nhưng đây là thông tin quan trọng. –

+0

Cập nhật: trên mac, tôi chỉ cần cài đặt từ nguồn. Nó hoạt động, thật dễ dàng, và tôi có toàn quyền kiểm soát và không cần phải tìm cách đẩy cổng xung quanh để cho tôi những gì tôi cần. – sethcall

5

Dường như cổng cho PostgreSQL 9.1 hiện nay bao gồm hstore, nhưng nó vẫn cần phải được kích hoạt. Cài đặt và khởi động cơ sở dữ liệu bình thường.

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 

CHỈNH SỬA: Cài đặt trong máy tính khác không hoạt động. Các hstore đã không được cài đặt với cơ sở (tôi có thể đã làm cho nó có sẵn cố gắng các giải pháp khác). Vì vậy, hãy làm điều này TRƯỚC KHI lệnh tải ở trên:

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 

Để bật tiện ích mở rộng hstore, hãy sử dụng lệnh "tạo tiện ích mở rộng" SQL mới trong (các) cơ sở dữ liệu bạn sẽ sử dụng hstore. Nếu bạn cài đặt nó vào cơ sở dữ liệu template1, tất cả các cơ sở dữ liệu được tạo sau đó sẽ có phần mở rộng hstore.

psql template1 postgres 
template1=# create extension hstore; 

Nếu bạn chỉ cần phần mở rộng trong một cơ sở dữ liệu cụ thể:

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) 
Các vấn đề liên quan