sql >> Database >  >> RDS >> PostgreSQL

Is er een manier om het postgresql 9.3-gegevenstype te casten, zodat het slechts één kant kan beïnvloeden?

Er zijn drie soorten cast. De geregistreerde cast voor uw bron en een doeltype moet "toewijzing" zijn (a ) of "impliciet" (i ) om te werken in de VALUES uitdrukking van een INSERT uitspraak. Kijkend naar de systeemcatalogus pg_cast , de cast van boolean naar integer is alleen gedefinieerd "expliciet" (e ) :

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

Resultaat:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Gerelateerd:

Je zou castcontext . moeten veranderen om het te laten werken - wat u kunt doen als supergebruiker. Er is geen "ALTER CAST"-statement voor deze exotische manoeuvre, je zou moeten UPDATE direct. Vind ik leuk:

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

Echter , zijn er goede redenen voor de vooraf gedefinieerde cast-context van elke cast. Knoeien met systeemcatalogi is niet iets dat u lichtvaardig moet doen. In dit specifieke geval kan het de besluitvorming uit balans brengen wanneer Postgres een bijpassende cast moet kiezen. Zoals kiezen uit een reeks overbelaste functies ...

Vergelijkbare procedure voor integer -> boolean , int2 -> boolean , boolean -> int2 , enz.



  1. Effectieve monitoring van MySQL met SCUMM-dashboards:deel 3

  2. Hoe ervoor te zorgen dat databases geen gefragmenteerde indexen hebben

  3. Sorteren vermijden met Samenvoegen Samenvoegen Samenvoegen

  4. Hoe kan ik met Scala verbinding maken met een MySQL-database?