sql >> Databáze >  >> RDS >> PostgreSQL

Django/PostgreSQL varchar na UUID

type uuid ve vašem příkazu DDL je zkratka pro SET DATA TYPE uuid . Příručka:

varchar_pattern_ops je třída operátorů to by bylo uvedeno ve vaší chybové zprávě, pokud máte uuid pomocí této třídy operátorů v libovolném indexu. Obvykle za účelem rychlejšího třídění, porovnávání vzorů a podmínek rozsahu.

Chcete-li to opravit, zrušte konfliktní indexy, změňte typ dat a poté znovu vytvořte indexy bez speciální třídy operátorů - if stále je potřebujete.

Některé typické dotazy však využívají varchar_pattern_ops index by přestal fungovat s datovým typem uuid místo varchar . Jako porovnávání vzorů:

Nezapomeňte také opravit všechny takové dotazy.

upozornění na @fl0cke související odpověď:

Navrhuji trochu jinou cestu. Je levnější index zrušit, změnit typ dat a pak vytvořte nový index – pokud je stále užitečný.

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

Jak najít problematický index?

V moderních verzích Postgresu získáte existující indexy pro tabulku pomocí \d tbl v psql.

Chcete-li získat všechny kompletní CREATE INDEX výpisy pro danou tabulku:

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

Chcete-li získat pouze ty pomocí 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';

Podrobnosti:



  1. Jak vybudovat flaskovou aplikaci na již existující databázi?

  2. Mám potíže s přesunem své aplikace rails do Heroku/získání instalace drahokamu 'pg'?

  3. Získat celkový počet řádků při použití LIMIT?

  4. Blokování vstupů nulových hodnot do databáze