Tìm kiếm cơ sở dữ liệu PostgreSQL trên một ổ cứng khác so với hệ thống của tôi trên OS X?


7

Tôi đang dùng OS X 10.8.3, tôi đã cài đặt PostgreSQL từ macports, nhưng tôi nhận ra rằng tôi không có đủ dung lượng trên ổ đĩa hệ thống của mình cho DB mà tôi sắp nhập dữ liệu.

Có cách nào để tạo cơ sở dữ liệu mới trên một ổ đĩa / phân vùng khác (không phải hệ thống, nơi cài đặt postgres) không?

Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


6

Tạo cơ sở dữ liệu mới, sau đó tạo một vùng bảng trên ổ đĩa ngoài của bạn:

CREATE TABLESPACE mytablespace LOCATION '/Volumes/externaldisk/pg';

Sau đó thay đổi cơ sở dữ liệu để không gian bảng mới là vị trí mặc định cho nó:

ALTER DATABASE MYDB TABLESPACE mytablespace;

Một cách khác để làm điều này là chỉ cần di chuyển toàn bộ thư mục dữ liệu Postgres của bạn sang ổ đĩa ngoài, sau đó biểu tượng liên kết thư mục ổ đĩa ngoài trở lại vị trí ban đầu.

Nếu bạn muốn tạo nhiều không gian bảng trên nhiều ổ đĩa, bạn cũng có thể chỉ định không gian bảng nào mà bảng hoặc chỉ mục sẽ cư trú bằng cách sử dụng tham số TABLESPACE trong việc tạo DDL.


Bạn không thực sự cần liên kết tượng trưng. Chỉ cần cho biết pg_ctlvị trí của thư mục dữ liệu bằng cách sử dụng -Dchuyển đổi. Không biết Postgres được bắt đầu như thế nào trên OSX, vì vậy tôi không thể biết nơi này được cấu hình.
a_horse_with_no_name

Đúng rồi, giống nhau. Nghĩ rằng một liên kết tượng trưng là tốt đẹp và minh bạch và không cần thay đổi cấu hình.
Phil

1
Không gian bảng trên khối lượng di động là một ý tưởng dữ liệu khá tệ. Thực sự không nên. Tài liệu PostgreSQL không làm cho nó rõ ràng như các vùng bảng là các phần không thể thiếu của DB; nếu bạn mất một vùng bảng, bạn không thể bỏ nó và tiếp tục sử dụng phần còn lại của DB. Loại bỏ chỉ một vùng bảng và giữ phần còn lại của DB chạy có thể có tất cả các loại hậu quả thú vị của dữ liệu.
Craig Ringer

Tôi đang sử dụng một cơ sở dữ liệu để đánh bại hiệu năng, v.v., vì vậy không bận tâm liệu cơ sở dữ liệu có còn tồn tại hay không. Viết ở đây rằng cơ sở dữ liệu trong câu hỏi đã được đẩy sang một ổ đĩa ngoài, tôi đã rút ổ đĩa trong khi postgres được kết nối với cơ sở dữ liệu, tôi đã khởi động lại mà không có ổ đĩa được kết nối, tôi đã sao chép thư mục sang một vị trí khác trên một ổ đĩa khác sau đó cập nhật symlink ( hướng dẫn ) trong khi chạy và kết nối với cơ sở dữ liệu, và cơ sở dữ liệu đã tồn tại tất cả.
Chris

Hãy nghĩ rằng câu trả lời bỏ lỡ từ SET, tức là,ALTER DATABASE dbname SET TABLESPACE spc;
Chris

8

Tôi thực sự khuyên bạn không nên đặt một vùng bảng trên một ổ di động ngoài. Nếu các không gian bảng biến mất (ví dụ: ổ đĩa không được cắm), bạn có nguy cơ bị hỏng cơ sở dữ liệu nghiêm trọng sẽ khó phục hồi. Bạn cũng có thể thấy quản lý quyền cũng là một thách thức.

Bạn thường nên initdbmột cụm cơ sở dữ liệu mới trên ổ đĩa, sau đó bắt đầu với pg_ctl. Nếu bạn thích, bạn có thể thay đổi thuộc tính launchd của mình để tự động khởi động cơ sở dữ liệu (điều này sẽ yêu cầu làm rối với quyền truy cập tệp) hoặc bạn chỉ có thể tự khởi động nó pg_ctlkhi bạn muốn sử dụng nó.

Có thể dễ dàng hơn để di chuyển thư mục dữ liệu hiện tại đến vị trí mới và tạo liên kết tượng trưng từ vị trí cũ sang vị trí mới hoặc chỉnh sửa cấu hình launchd của bạn để báo cho trình khởi chạy PostgreQuery tìm vị trí mới. Nếu bạn postgresql.confở ngoài thư mục dữ liệu, bạn chỉ có thể thay đổi data_directorytham số postgresql.confthay thế.

Xem hướng dẫn sử dụng PostgreSQL để biết chi tiết về initdbpg_ctlnếu bạn cần sử dụng chúng.

Để biết cách thiết lập PostgreSQL để khởi động cơ sở dữ liệu mới của bạn khi khởi động, bạn sẽ muốn thực hiện một số tìm hiểu về permisisons tệp và các thuộc tính launchd. Tôi không sử dụng OS X nhiều vì vậy tôi không thể giúp được gì nhiều cho phần này; nếu bạn bị bối rối và bạn đã đọc xong để cố gắng tìm ra nó, hãy xem xét yêu cầu trợ giúp trên trang web trao đổi ngăn xếp OSX. Chỉ cần nhớ để giải thích những gì bạn đã cố gắng và những gì bạn đã làm. Bạn sẽ không cần phải làm điều này nếu bạn chỉ liên kết nó từ vị trí cũ.


Là không gian bảng không phải là một phần của thư mục dữ liệu? Hoặc là điểm mà nếu thư mục dữ liệu bị thiếu, DB sẽ không khởi động và do đó sẽ không làm hỏng bất cứ điều gì?
kutschkem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.