Tôi đang cố sử dụng loại JSONB "mới mẻ".Cách lập chỉ mục các giá trị số nguyên jsonb
Tôi có một bảng documents
với trường là properties
jsonb và trong đó là trường publication_year
. Tôi muốn tìm tất cả hồ sơ tài liệu trong phạm vi năm, ví dụ: 2013-2015. [EDIT: Việc truy vấn một loạt các giá trị là thách thức chính ở đây, mặc dù tôi đã sử dụng ví dụ đối sánh chính xác bên dưới. Cách tiếp cận yêu cầu cũng sẽ được áp dụng cho, nói dãy đô la (giá> $ 20 và giá < $ 40) hoặc dãy timestamp)]
Tôi đã thử:.
create index test1 on documents using gin ((cast(properties->'announced_on_year' as integer)));
ERROR: cannot cast type jsonb to integer
cũng như:
create index test1 on documents using gin (cast(properties->>'publication_year' as integer));
ERROR: data type integer has no default operator class for access method "gin"
HINT: You must specify an operator class for the index or define a default operator class for the data type.`
Tôi thấy từ bài đăng này http://www.postgresql.org/message-id/[email protected] rằng điều này sẽ có thể, nhưng tôi không thể tìm ra cú pháp đúng.
Khi tôi chỉ làm một chỉ số đơn giản:
create index test1 on documents using gin ((properties->'publication_year'));
một chỉ số được tạo ra, nhưng tôi không thể truy vấn nó sử dụng các giá trị số nguyên để có được một phạm vi đi, nó nói
select count(*) from documents where properties->>'publication_year' = 2015;
ERROR: operator does not exist: text = integer
LINE 1: ...*) from documents where properties->>'publication_year' = 2015;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Bất cứ lời khuyên và gợi ý đánh giá cao. Tôi chắc rằng những người khác cũng sẽ được hưởng lợi. TIA
Cảm ơn bạn-- Tôi nghĩ đây là câu trả lời tôi đang tìm kiếm. Mặc dù các tài liệu không chỉ định nó, bạn có thể với giải pháp này sử dụng CAST để có được kết quả phạm vi, như: 'GIẢI THÍCH ANALYZE SELECT COUNT (*) TỪ tài liệu WHERE cast (properties - >> 'publication_year' AS integer)> 2012 VÀ đúc (thuộc tính - >> 'publication_year' AS số nguyên) <2016; –
Tôi không chắc chắn, nếu sử dụng nó theo cách này sẽ có tác động đến hiệu suất (mà tôi đoán là mục tiêu). Theo tài liệu - toán tử "- >>" không được loại chỉ mục này hỗ trợ. Ngoài ra - bạn có thể kết hợp 'x> A VÀ x murison