PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django/PostgreSQL varchar към UUID

type uuid във вашия DDL оператор е стенограма за SET DATA TYPE uuid . Ръководството:

varchar_pattern_ops е операторен клас което ще бъде споменато във вашето съобщение за грешка, ако имате uuid използвайки този операторен клас във всеки индекс. Обикновено за активиране на по-бързо сортиране, съвпадение на шаблони и условия за обхват.

За да коригирате, премахнете конфликтните индекси, променете типа данни и след това създайте отново индекси без специалния операторен клас - if все още се нуждаете от тях.

Въпреки това, някои типични заявки, които биха използвали varchar_pattern_ops index ще спре да работи с тип данни uuid вместо varchar . Като съпоставяне на образец:

Уверете се, че коригирате и всички подобни заявки.

@fl0cke посочи свързан отговор:

Предлагам малко по-различен маршрут. По-евтино е да премахнете индекса, да промените типа на данните и след това създайте нов индекс - ако все още е полезен.

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);

Как да намеря обиден индекс?

В съвременните версии на Postgres получавате съществуващи индекси за таблицата с \d tbl в psql.

За да получите целия пълен CREATE INDEX изрази за дадената таблица:

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

За да получите само тези, които използват 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';

Подробности:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отдалечен работен процес Symfony2 + Netbeans (feat. git)

  2. Друг начин за прехвърляне на varbit към int? И bigint?

  3. Заявка за оптимизиране/индексиране на часова зона

  4. Как да намеря всички дефинирани от потребителя (не свързани с разширение) функции?

  5. Как да намеря почти подобни записи в sql?