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

Django / PostgreSQL varchar thành UUID

type uuid trong câu lệnh DDL của bạn là viết tắt của SET DATA TYPE uuid . Hướng dẫn:

varchar_pattern_ops lớp toán tử sẽ được đề cập trong thông báo lỗi của bạn nếu bạn có uuid sử dụng lớp toán tử này trong bất kỳ chỉ mục nào. Thông thường để kích hoạt các điều kiện sắp xếp, đối sánh mẫu và phạm vi nhanh hơn.

Để khắc phục, hãy loại bỏ các chỉ mục xung đột, thay đổi kiểu dữ liệu và sau đó tạo lại các chỉ mục mà không có lớp toán tử đặc biệt - if bạn vẫn cần chúng.

Tuy nhiên, một số truy vấn điển hình sẽ sử dụng varchar_pattern_ops chỉ mục sẽ ngừng hoạt động với kiểu dữ liệu uuid thay vì varchar . Giống như đối sánh mẫu:

Đảm bảo cũng sửa mọi truy vấn như vậy.

@ fl0cke đã chỉ ra một câu trả lời liên quan:

Tôi đề nghị một con đường hơi khác. Sẽ rẻ hơn nếu giảm chỉ mục, thay đổi loại dữ liệu và sau đó tạo một chỉ mục mới - nếu nó vẫn hữu ích.

DROP INDEX tbl_guid_varchar_pattern_ops_idx;

ALTER TABLE tbl ALTER COLUMN guid TYPE uuid USING guid::uuid;

CREATE INDEX tbl_guid_idx ON tbl (guid);

Làm cách nào để tìm chỉ mục vi phạm?

Trong các phiên bản hiện đại của Postgres, bạn nhận được các chỉ mục hiện có cho bảng với \d tbl trong psql.

Để có được tất cả CREATE INDEX hoàn chỉnh câu lệnh cho bảng đã cho:

SELECT pg_get_indexdef(indexrelid) || ';' AS idx
FROM   pg_index
WHERE  indrelid = 'public.tbl'::regclass;  -- optionally schema-qualified

Để chỉ lấy những cái bằng cách sử dụng varchar_pattern_ops :

SELECT pg_get_indexdef(i.indexrelid) || ';' AS idx
FROM   pg_index i
JOIN   pg_opclass o ON o.oid = ANY (i.indclass)
WHERE  i.indrelid = 'public.big'::regclass
AND    o.opcname = 'varchar_pattern_ops';

Chi tiết:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để so khớp các phần tử trong một mảng kiểu kết hợp?

  2. SQLAlchemy kế thừa không hoạt động

  3. Làm cách nào để bạn thêm Trình điều khiển PostgreSQL làm phụ thuộc trong Maven?

  4. Trả về các giá trị không phải dạng số từ cột cơ sở dữ liệu PostgreSQL

  5. Làm cách nào để gửi email từ trình kích hoạt PostgreSQL?