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

postgresql:列挙型と文字が変化し、更新されます

    単純な試みの問題は、キャストを呼び出すキャスト、キャストを呼び出すキャスト、キャストを呼び出すキャストがあることです...

    キャストでvarchar->enumから離れるにはどういうわけか必要です。最も簡単な(最も理解しやすい)方法は、手動で変換することです。 caseステートメントでキャストされる文字列リテラルはテキストではないことに注意してください。引用符で囲まれた不明なタイプであり、無限再帰を回避します。

    BEGIN;
    
    CREATE TYPE t_tl AS ENUM ('red', 'amber', 'green');
    
    CREATE FUNCTION dummy_cast(varchar) RETURNS t_tl AS $$
        SELECT CASE $1
            WHEN 'red' THEN 'red'::t_tl
            WHEN 'amber' THEN 'amber'::t_tl
            WHEN 'green' THEN 'green'::t_tl
        END;
    $$ LANGUAGE SQL;
    
    CREATE CAST (varchar AS t_tl) WITH FUNCTION dummy_cast(varchar) AS ASSIGNMENT;
    
    CREATE TABLE t (x t_tl);
    
    INSERT INTO t VALUES ('red');
    INSERT INTO t VALUES ('green'::varchar);
    
    SELECT * FROM t;
    
    ROLLBACK;
    


    1. MySQLDBへの動的SQLクエリの作成

    2. 2つのセットを比較するTSQL

    3. Oracleで列挙型を使用するにはどうすればよいですか?

    4. MariaDB:カスタムデータディレクトリ:常に/ var / lib/mysqlディレクトリを保持する必要があります