PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Има ли някакъв начин за прехвърляне на тип данни postgresql 9.3, така че да може да засегне само едната страна

Има три вида отливки. Регистрираният актьорски състав за вашия източник и целеви тип трябва да бъде "присвояване" (a ) или "имплицитно" (i ) за работа в VALUES израз на INSERT изявление. Разглеждане на системен каталог pg_cast , предаването от boolean към integer се дефинира само "явно" (e ) :

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

Резултат:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Свързани:

Ще трябва да промените castcontext за да работи - което можете направете като суперпотребител. Няма оператор „ALTER CAST“ за тази екзотична маневра, ще трябва да UPDATE директно. Като:

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

Въпреки това , има основателни причини за предварително дефинирания контекст на предаване на всяко предаване. Подправянето на системните каталози не е нещо, което трябва да правите с лека ръка. В този конкретен случай това може да дисбалансира вземането на решения, когато Postgres трябва да избере подходящ каст. Например за избор от набор от претоварени функции ...

Подобна процедура за integer -> boolean , int2 -> boolean , boolean -> int2 и т.н.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:сериен срещу самоличност

  2. Диалектът трябва да бъде изрично предоставен от v4.0.0

  3. Обединете няколко реда в един с повече от една стойност на ред в колона

  4. Изберете стойности на няколко реда в един ред с клаузи за множество таблици

  5. EF Core GroupBy с Select Distinct Count