Tôi đang cố gắng tạo một phiên bản không phân biệt chữ hoa chữ thường json_extract_path_text()
, sử dụng citext
mô-đun.
Tôi muốn đây là một trình bao bọc đơn giản xung quanh hàm tích hợp, sự khác biệt duy nhất là nó chấp nhận citext
làm tham số đầu tiên thay vì json
. Tôi muốn điều này là một sự chuyển tiếp thẳng đến việc thực hiện riêng, chỉ với một chuyển đổi loại trước đó. Đây là những gì tôi có cho đến nay:
create extension citext;
create or replace function json_extract_path_text ( string citext, variadic params text[]) RETURNS text IMMUTABLE AS
$$
BEGIN
SELECT json_extract_path_text(string::json, params);
END;
$$
LANGUAGE 'plpgsql';
Điều này không hoạt động đúng, tuy nhiên, do loại khớp sai:
ERROR: function json_extract_path_text(json, text[]) does not exist LINE 1: SELECT json_extract_path_text(string::json, params) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. QUERY: SELECT json_extract_path_text(string::json, params) CONTEXT: PL/pgSQL function json_extract_path_text(citext,text[]) line 3 at SQL statement
Tôi đã thử hack xung quanh một giải pháp bằng cách sử dụng cấu trúc chuỗi động và EXECUTE
, nhưng đây là một rắc rối thực sự và tôi cảm thấy như phải có một cách sạch hơn để truyền VARIADIC
thông số vào chức năng bên trong. Tôi không thể thấy bất kỳ cách rõ ràng để làm như vậy, tuy nhiên. Làm thế nào tôi có thể hoàn thành nó?
SELECT jsonb_build_array('A', VARIADIC array_agg(value)) FROM jsonb_array_elements_text('["B","C"]'::JSONB)
, có ý tưởng nào tại sao không?