PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy istnieje sposób na rzucenie typu danych postgresql 9.3, aby mógł wpływać tylko na jedną stronę?

Istnieją trzy rodzaje odlewów. Zarejestrowanym rzutem źródła i typem docelowym musi być "przypisanie" (a ) lub "niejawny" (i ) do pracy w VALUES wyrażenie INSERT oświadczenie. Patrząc na katalog systemowy pg_cast , rzut z boolean na integer jest zdefiniowany tylko jako "jasny" (e ) :

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

Wynik:

castsource  casttarget  castfunc         castcontext
boolean     integer     pg_catalog.int4  e

Powiązane:

Będziesz musiał zmienić castcontext aby to działało – co możesz zrobić jako superużytkownik. Nie ma instrukcji "ALTER CAST" dla tego egzotycznego manewru, musisz UPDATE bezpośrednio. Na przykład:

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

Jednak , istnieją dobre powody dla predefiniowanego kontekstu rzutowania każdego rzutowania. Manipulowanie katalogami systemowymi nie jest czymś, co należy robić lekko. W tym konkretnym przypadku może to zachwiać równowagą podejmowania decyzji, gdy Postgres musi wybrać pasującą obsadę. Jak przy wybieraniu z zestawu przeładowanych funkcji...

Podobna procedura dla integer -> boolean , int2 -> boolean , boolean -> int2 itp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. date_trunc 5-minutowy interwał w PostgreSQL

  2. Zwiń wiersze w jedną kolumnę

  3. Django - Wyszukiwanie pełnotekstowe - Wildcard

  4. psql:nie można połączyć się z serwerem:Brak takiego pliku lub katalogu (Mac OS X)

  5. Wdrażasz bazę danych Postgres na platformie Azure Container Instance?