2011-07-10 38 views
6

Tôi sẽ chuyển từ mysql sang postgres và tôi đang gặp sự cố khi tạo chỉ mục.postgres tạo chỉ mục

TẠO INDEX chỉ định bảng BẬT SỬ DỤNG gist (point_col);

Đây là câu trả lời tôi nhận được trở lại:

LỖI: kiểu dữ liệu điểm không có lớp điều hành mặc định cho phương pháp truy cập "ý chính" GỢI Ý: Bạn phải xác định một lớp điều hành cho các chỉ số hoặc xác định một lớp điều hành mặc định cho kiểu dữ liệu.

Tôi đã thấy tôi cần chỉ định lớp toán tử cho chỉ mục, các lớp khác nhau có thể được sử dụng tùy thuộc vào loại toán tử bạn muốn sử dụng trên cột. Tôi muốn sử dụng @> hoặc ~ để tìm xem liệu một điểm có nằm trong đa giác hay không.

Làm cách nào để chỉ định lớp toán tử? giúp đỡ xin vui lòng có được một điều đơn giản nhưng tôi stumped!

EDIT

Dưới đây là một màn hình in của tôi cố gắng để thêm một chỉ số vào bảng chi nhánh:

        Table "public.branch" 
     Column  |  Type  |      Modifiers      
------------------+------------------+----------------------------------------------------- 
id    | integer   | not null default nextval('branch_id_seq'::regclass) 
name    | character(120) | 
center_point_lat | double precision | 
center_point_lng | double precision | 
center_point  | point   | 
Indexes: 
    "branch_pkey" PRIMARY KEY, btree (id) 

paul=# create index pt_idx on branch using gist (center_point); 
ERROR: data type point has no default operator class for access method "gist" 
HINT: You must specify an operator class for the index or define a default operator class for the data type. 

Trả lời

3

vẻ khi được làm việc tốt khi tôi cố gắng:

test=# create table test (pt point); 
CREATE TABLE 
test=# create index pt_idx on test using gist (pt); 
CREATE INDEX 

Bạn có chắc chắn point_col thực sự là của loại point? Bởi vì, nếu nó là một varchar, hơn nó sẽ thực sự miserably thất bại mà không có sự đóng góp btree_gist - và thậm chí sau đó nó sẽ không rất hữu ích.

+0

đã chỉnh sửa câu hỏi của tôi hiển thị màn hình in và tôi đang cố thêm chỉ mục ... hãy cho tôi biết tôi đang ngu ngốc :) –

+0

Đây có thể là phiên bản Postgresql của bạn. (Tôi đang chạy 9.1-beta, có bổ sung để lập chỉ mục, vì vậy đó có thể là lý do tại sao tôi không nhận được bất kỳ lỗi nào.) –

+0

Điều đó có thể là tôi đang sử dụng 8.1.23 trên hệ thống Centos 5.5. Thực hiện cập nhật yum cho thấy tôi không thể cập nhật lên phiên bản postgres mới hơn .... :(, bất kỳ ý tưởng nào về cách nó đã được thực hiện với 8.1.23. Tôi không thể tìm thấy bất kỳ thông tin nào để thêm các lớp toán tử khi tạo chỉ mục hoặc thậm chí những cái tôi sẽ cần phải thực hiện tìm kiếm đa giác/điểm lol –

Các vấn đề liên quan