sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql:enum og karakter varierende, opdatering

Problemet med et simpelt forsøg er, at du har en rollebesætning, der kalder medvirkende, kalder medvirkende, kalder medvirkende...

Du skal på en eller anden måde komme væk fra varchar->enum i dit gips. Den enkleste (mest forståelige) måde er bare at konvertere manuelt. Bemærk, at de bogstavelige strenge, der støbes i kasussætningen, ikke er tekst, de er citeret-ukendt-type, hvilket omgår den uendelige rekursion.

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. Cloud SQL Postgres Ingen passende driver fundet til jdbc:postgres://google/

  2. Hvordan bruger man aliaser i matematiske operatorer i SQL?

  3. Sådan indstilles max_connections i MySQL Programmatisk

  4. orakelintegritetsbegrænsning