sql >> データベース >  >> RDS >> PostgreSQL

Django /PostgreSQLvarcharからUUIDへ

    type uuid DDLステートメントのSET DATA TYPE uuidの省略形です。 。 マニュアル:

    varchar_pattern_opsオペレータークラスです。 uuidがある場合は、エラーメッセージにその旨が記載されます。 この演算子クラスを任意のインデックスで使用します。通常、より高速な並べ替え、パターンマッチング、範囲条件を有効にします。

    修正するには、競合するインデックスを削除し、データ型を変更してから、特別な演算子クラスなしでインデックスを再作成します- if まだ必要です。

    ただし、varchar_pattern_opsを使用するいくつかの一般的なクエリ インデックスはデータ型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を使用して1つだけを取得するには :

    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. データベースからテーブル名を取得する

    2. テーブル間の差分を高速化するにはどうすればよいですか?

    3. mysqlは一意ではありません自動インクリメント、主キー2フィールド

    4. Android:SSL / HTTPSを使用してPHPとデータベースに接続し、POST/GETを使用する