Takket være funktionstypeopløsning vi kan også sende date værdier til generate_series() fordi der er en implicit cast fra date til timestamp samt fra date til timestamptz . Ville være tvetydigt, men timestamptz er "foretrukket" blandt "Dato/tidstyper". Detaljeret forklaring:
- Generering af tidsserier mellem to datoer i PostgreSQL
For en bar date den lokale tid 00:00 antages i rollebesætningen. Vær opmærksom på, at den aktuelle tidszoneindstilling direkte påvirker resultatet, hvis du bruger date som input, da '2014-01-10 00:00' naturligvis repræsenterer et andet tidspunkt i Tokio, end det gør i New York.
Hvordan beslutter Postgres, hvilke typer der er acceptable?
Postgres skelner grundlæggende mellem tre typer afstøbninger:
Explicit casts .. når du bruger CAST eller :: syntaks.Assignment cast .. implicit cast, når en værdi er tildelt en målkolonne.Implicit cast .. implicitte afstøbninger i alle andre udtryk.
Der skal være en implicit cast registreret i systemet fra inputtypen til den forventede type for at få en funktion til lydløst at acceptere (og konvertere) en inputværdi.
For at se, hvilke casts der er defineret til timestamptz , kan du forespørge i katalogtabellen pg_cast :
SELECT castsource::regtype, casttarget::regtype, castcontext
FROM pg_cast
WHERE casttarget = 'timestamptz'::regtype;
castsource | casttarget | castcontext
-----------------------------+--------------------------+-------------
abstime | timestamp with time zone | i
date | timestamp with time zone | i
timestamp without time zone | timestamp with time zone | i
timestamp with time zone | timestamp with time zone | i
Alle disse medvirkende er implicitte . Per dokumentation på castcontext :
Angiver hvilke sammenhænge castet kan påkaldes i. e betyder kun som en eksplicit cast (ved hjælp af CAST eller :: syntaks). a betyder implicit tildeling til en målkolonne, såvel som eksplicit. i betyder implicit i udtryk, såvel som de andre tilfælde.
Fed fremhævelse mine.