sql >> Databáze >  >> RDS >> PostgreSQL

postgresql:enum a charakter mění, aktualizuje se

Problém s jednoduchým pokusem je, že máte obsazení, které volá obsazení, volá obsazení, volá obsazení...

Potřebujete se nějak dostat z varchar->enum ve vašem obsazení. Nejjednodušší (nejsrozumitelnější) způsob je pouze ruční převod. Všimněte si, že řetězcové literály přetypované v příkazu case nejsou textem, jsou v uvozovkách neznámého typu, což obchází nekonečnou rekurzi.

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. Výkon MySQL:Převod MySQL na MariaDB

  2. SQL Injection a klauzule LIMIT

  3. Odstraňte zámky bez pid v postgresu

  4. Jak vytvořit uloženou proceduru v MySQL