sql >> Databasteknik >  >> RDS >> PostgreSQL

Finns det något sätt att casta postgresql 9.3 datatyp så att den bara kan påverka en sida

Det finns tre typer av gjutning. Den registrerade skådespelaren för din källa och måltyp måste vara "tilldelning" (a ) eller "implicit" (i ) för att arbeta i VALUES uttryck för en INSERT påstående. Tittar på systemkatalogen pg_cast , skådespelaren från boolean till integer är bara definierad som "explicit" (e ) :

SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM   pg_cast
WHERE  castsource = 'bool'::regtype
AND    casttarget = 'int'::regtype;

Resultat:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Relaterat:

Du måste ändra castcontext för att få det att fungera - vilket du kan gör som superanvändare. Det finns ingen "ALTER CAST"-sats för denna exotiska manöver, du måste UPDATE direkt. Gilla:

UPDATE pg_cast
SET    castcontext = 'a'
WHERE  castsource = 'bool'::regtype
AND    casttarget = 'int'::regtype;

Men , det finns goda skäl för det fördefinierade castkontexten för varje cast. Att manipulera med systemkataloger är inte något du bör göra lättvindigt. I det här speciella fallet kan det obalans i beslutsfattandet när Postgres måste välja en matchande roll. Som för att välja från en uppsättning överbelastade funktioner ...

Liknande procedur för integer -> boolean , int2 -> boolean , boolean -> int2 osv.



  1. MySQL / PHP - Hitta tillgängliga tidsluckor

  2. Installation av Postgres på fönster för användning med Ruby-on-Rails

  3. PIVOT / UNPIVOT i SQL Server 2008

  4. IP-adress som lagras i MySQL-databas med PHP