Tack vare upplösning av funktionstyp vi kan också skicka date värden till generate_series() eftersom det finns en implicit cast från date till timestamp samt från date till timestamptz . Skulle vara tvetydigt, men timestamptz är "föredragen" bland "Datum/tidstyper". Detaljerad förklaring:
- Genererar tidsserier mellan två datum i PostgreSQL
För ett blott date den lokala tiden 00:00 antas i rollistan. Var medveten om att den aktuella tidszonsinställningen direkt påverkar resultatet om du använder date som input eftersom "2014-01-10 00:00" uppenbarligen representerar en annan tidpunkt i Tokio än den gör i New York.
Hur avgör Postgres vilka typer som är acceptabla?
Postgres skiljer i princip mellan tre typer av kast:
Explicit casts .. när du använder CAST eller :: syntax.Assignment cast .. implicit cast när ett värde tilldelas en målkolumn.Implicit cast .. implicita gjutningar i alla andra uttryck.
Det måste finnas en implicit cast registreras i systemet från ingångstyp till förväntad typ för att få en funktion att tyst acceptera (och konvertera) ett indatavärde.
För att se vilka casts som är definierade till timestamptz , kan du fråga 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
Alla dessa rollbesättningar är implicita . Per dokumentation på castcontext :
Indikerar vilka sammanhang skådespelaren kan anropas i.
ebetyder endast som en explicit cast (medCASTeller::syntax).abetyder implicit tilldelning till en målkolumn, såväl som explicit.ibetyder underförstått i uttryck, såväl som de andra fallen.
Djärv betoning min.