PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Django/PostgreSQL varchar ke UUID

type uuid dalam pernyataan DDL Anda adalah singkatan untuk SET DATA TYPE uuid . Manual:

varchar_pattern_ops adalah kelas operator yang akan disebutkan dalam pesan kesalahan Anda jika Anda memiliki uuid menggunakan kelas operator ini dalam indeks apa pun. Biasanya untuk mengaktifkan kondisi penyortiran, pencocokan pola, dan rentang yang lebih cepat.

Untuk memperbaikinya, hapus indeks yang bertentangan, ubah tipe data, lalu buat kembali indeks tanpa kelas operator khusus - jika Anda masih membutuhkannya.

Namun, beberapa kueri umum yang akan menggunakan varchar_pattern_ops index akan berhenti bekerja dengan tipe data uuid bukannya varchar . Seperti pencocokan pola:

Pastikan untuk memperbaiki pertanyaan seperti itu juga.

@fl0cke ditunjukkan jawaban terkait:

Saya menyarankan rute yang sedikit berbeda. Lebih murah untuk menjatuhkan indeks, mengubah tipe data dan lalu buat indeks baru - jika masih berguna.

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

Bagaimana cara menemukan indeks yang menyinggung?

Dalam versi Postgres modern, Anda mendapatkan indeks yang ada untuk tabel dengan \d tbl di psql.

Untuk mendapatkan semua CREATE INDEX complete pernyataan untuk tabel yang diberikan:

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

Untuk mendapatkan yang hanya menggunakan 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';

Detail:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menulis fungsi PostgreSQL di Ruby on Rails?

  2. Operasi CASCADE bersyarat untuk batasan kunci asing?

  3. Pyodbc - Nama sumber data tidak ditemukan, dan tidak ada driver default yang ditentukan

  4. PostgreSQL :berikan string hingga saat ini DD/MM/YYYY

  5. Jarak PostgreSQL antara 2 titik yang disimpan dalam tabel