sql >> Database >  >> RDS >> PostgreSQL

Django/PostgreSQL varchar naar UUID

type uuid in uw DDL-statement is een afkorting voor SET DATA TYPE uuid . De handleiding:

varchar_pattern_ops is een operatorklasse dat wordt vermeld in uw foutmelding als u uuid . heeft gebruik van deze operatorklasse in elke index. Meestal om sneller sorteren, patroonovereenkomst en bereikcondities mogelijk te maken.

Om dit op te lossen, verwijdert u conflicterende indexen, wijzigt u het gegevenstype en maakt u vervolgens indexen opnieuw aan zonder de speciale operatorklasse - if je hebt ze nog steeds nodig.

Echter, enkele typische zoekopdrachten die gebruik zouden maken van een varchar_pattern_ops index zou stoppen met werken met gegevenstype uuid in plaats van varchar . Zoals patroon-matching:

Zorg ervoor dat u dergelijke vragen ook oplost.

@fl0cke gewezen een gerelateerd antwoord:

Ik stel een iets andere route voor. Het is goedkoper om de index te laten vallen, het gegevenstype te wijzigen en dan maak een nieuwe index - als deze nog steeds nuttig is.

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

Hoe vind ik de gewraakte index?

In moderne versies van Postgres krijg je bestaande indexen voor de tabel met \d tbl in psql.

Om alles compleet te krijgen CREATE INDEX uitspraken voor de gegeven tabel:

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

Om alleen degenen te krijgen die varchar_pattern_ops gebruiken :

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

Details:



  1. Oracle SEQUENCE. Currval-probleem in CodeIgniter

  2. Slaapstand postgresql/hsqldb TEXT kolom incompatibiliteitsprobleem

  3. Is er een booleaans type in Oracle-databases?

  4. Geneste klassen - CustomRowMapper !! Geen probleem meer!! - Deel 1