PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách nhóm / chọn cột kiểu JSON (PG ::UndefinedFunction:ERROR:không thể xác định toán tử bình đẳng cho kiểu json)

Rất tiếc, không có cách đơn giản nào để thực hiện trực tiếp json kiểm tra bình đẳng trong 9.3.

9.3 của json kiểu không có toán tử bình đẳng, vì nó chấp nhận json với các khóa trùng lặp (như nhiều triển khai mong đợi). Không rõ là {"a":1, "a":2} là "bằng" với {"a":1} hoặc không.

9.4 thêm jsonb điều này thu gọn các khóa trùng lặp trên cơ sở khóa cuối cùng giành chiến thắng, làm cho sự bình đẳng trở nên rõ ràng.

regress=# SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
ERROR:  operator does not exist: json = json
LINE 1: SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
                                      ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

regress=# SELECT '{"a":1, "a":2}'::jsonb = '{"a":1}'::jsonb;
 ?column? 
----------
 f
(1 row)

Thật không may, điều này có nghĩa là bạn không thể làm những gì bạn muốn chỉ trong 9.3.

Bạn có thể viết toán tử bình đẳng tùy chỉnh cho json - có lẽ chỉ truyền cả hai sang văn bản và so sánh theo cách đó, nhưng điều đó sẽ xử lý {"a":1, "b":2}{"b":2, "a":1} như không bình đẳng.

Một lựa chọn tốt hơn sẽ là cài đặt PL / V8 và sử dụng các hoạt động json của động cơ JavaScript V8 để thực hiện so sánh bình đẳng.

Xác định toán tử bình đẳng cho json , sau đó xác định một lớp b-cây đơn giản bằng cách sử dụng toán tử đó. Cả hai đều đơn giản để thực hiện ở cấp SQL - xem CREATE OPERATORCREATE OPERATOR CLASS .

Sau khi hoàn thành, bạn sẽ có thể GROUP BY giá trị json trong 9.3.

Hoặc bạn có thể chỉ cần cài đặt 9.4 beta1 và sử dụng jsonb .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gỡ cài đặt hoàn toàn PostgreSQL 9.0.4 khỏi Mac OSX Lion?

  2. fe_sendauth:không có lỗi cung cấp mật khẩu trong postgresql + laravel

  3. Bảng phân vùng dựa trên chữ cái đầu tiên của trường varchar

  4. PostgreSQL:Sử dụng câu lệnh AND trong LEFT JOIN không hoạt động như mong đợi

  5. Vấn đề với việc tạo Postgres RDS trong Mẫu thông tin đám mây