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

Er der nogen måde at caste postgresql 9.3 datatype, så det kun kan påvirke den ene side

Der er tre typer cast. Den registrerede rollebesætning for din kilde og måltype skal være "tildeling" (a ) eller "implicit" (i ) at arbejde i VALUES udtryk for en INSERT udmelding. Ser på systemkataloget pg_cast , castet fra boolean til integer er kun defineret "eksplicit" (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

Relateret:

Du skal ændre castcontext for at få det til at fungere - hvilket du kan gøre som superbruger. Der er ingen "ALTER CAST"-erklæring for denne eksotiske manøvre, du skal UPDATE direkte. Ligesom:

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

Men , er der gode grunde til den foruddefinerede rollebesætningskontekst for hvert medvirkende. At manipulere med systemkataloger er ikke noget, du skal gøre let. I dette særlige tilfælde kan det være ubalance i beslutningstagningen, når Postgres skal vælge en matchende rollebesætning. Som for at vælge fra et sæt overbelastede funktioner ...

Lignende procedure for integer -> boolean , int2 -> boolean , boolean -> int2 osv.



  1. Skinner 4:Brug af PostgreSQL-funktionen i rækkefølge forårsager fejl i forespørgslen på grund af, at inkluderingstabellen ikke bliver forbundet

  2. mysql-connector-python 2.0.1-1 confilct med python-mysql.connector

  3. Sådan tilslutter du tabeller på regex

  4. Få Autoincrement-værdi efter INSERT-forespørgsel i MySQL