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

Existuje nějaký způsob, jak přetypovat datový typ postgresql 9.3 tak, aby to mohlo ovlivnit pouze jednu stranu

Existují tři typy obsazení. Registrované obsazení pro váš zdroj a cílový typ musí být "přiřazení" (a ) nebo "implicitní" (i ) pracovat v VALUES výraz INSERT tvrzení. Při pohledu na systémový katalog pg_cast , obsazení z boolean na integer je definován pouze "explicitní" (e ) :

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

Výsledek:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Související:

Museli byste změnit castcontext aby to fungovalo – což můžete dělat jako superuživatel. Pro tento exotický manévr neexistuje žádné prohlášení „ALTER CAST“, budete muset UPDATE přímo. Jako:

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

Nicméně , existují dobré důvody pro předdefinovaný kontext obsazení každého obsazení. Manipulace se systémovými katalogy není něco, co byste měli dělat na lehkou váhu. V tomto konkrétním případě to může způsobit nerovnováhu při rozhodování, když Postgres musí vybrat odpovídající obsazení. Jako pro vybírání ze sady přetížených funkcí ...

Podobný postup pro integer -> boolean , int2 -> boolean , boolean -> int2 , atd.



  1. Přidejte spoustu dat s určitým časovým intervalem v Javě

  2. Oracle:Vytvořte složený klíč obsahující tři klíče Foregin

  3. Jak volat funkci Oracle s referenčním kurzorem jako out-parametrem z C#?

  4. Bez ohledu na to nemohu dávkovat příkazy MySQL INSERT v režimu spánku