sql >> Database >  >> RDS >> PostgreSQL

postgresql:opsomming en karakter variërend, bijwerken

Het probleem met een simpele poging is dat je een cast hebt die de cast roept, de cast roept, de cast roept...

Je moet op de een of andere manier wegkomen van varchar->enum in je cast. De eenvoudigste (meest begrijpelijke) manier is om gewoon handmatig te converteren. Merk op dat de letterlijke tekenreeksen die in de case-instructie worden gegoten, geen tekst zijn, ze zijn van het type met aanhalingstekens onbekend, wat de oneindige recursie omzeilt.

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. Hoe tags in een database op te slaan met MySQL en PHP?

  2. Hoe gebeurt databasecorruptie?

  3. PHP/Apache:PHP Fatale fout:Oproep naar ongedefinieerde functie mysql_connect()

  4. Hoe krijg ik CakePHP bake om mysql.sock te vinden en MySQL te herkennen terwijl ik MAMP gebruik op Mac OSX?