sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql:enum och karaktär varierar, uppdateras

Problemet med ett enkelt försök är att du har en skådespelare som ringer rollbesättningen, ringer rollbesättningen, ringer rollbesättningen...

Du behöver på något sätt komma bort från varchar->enum i din gips. Det enklaste (mest förståeliga) sättet är att bara konvertera manuellt. Observera att de bokstavliga strängarna som gjuts i kasussatsen inte är text, de är citerade-okänd typ, vilket kringgår den oändliga rekursionen.

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. MySQL-utvalda fält som innehåller inledande eller efterföljande blanksteg

  2. Skriver läsbar kod för VBA – Prova* mönster

  3. Hur man lägger till en loggfil till en SQL Server-databas (T-SQL)

  4. Predikatfel med Oracle VPD/RLS