Berkat resolusi jenis fungsi kami juga dapat melewati date nilai ke generate_series() karena ada implisit dilemparkan dari date ke timestamp serta dari date ke timestamptz . Akan ambigu, tetapi timestamptz adalah "lebih disukai" di antara "Jenis tanggal/waktu". Penjelasan detail:
- Membuat deret waktu antara dua tanggal di PostgreSQL
Untuk date telanjang waktu setempat 00:00 diasumsikan dalam pemeran. Ketahuilah bahwa pengaturan zona waktu saat ini secara langsung memengaruhi hasil jika Anda menggunakan date sebagai masukan karena, jelas, '2014-01-10 00:00' mewakili titik waktu yang berbeda di Tokio daripada di New York.
Bagaimana Postgres memutuskan jenis apa yang dapat diterima?
Postgres pada dasarnya membedakan antara tiga jenis pemeran:
Explicit casts .. saat menggunakan CAST atau :: sintaks.Assignment cast .. pemeran implisit saat nilai ditetapkan ke kolom target.Implicit cast .. pemeran implisit dalam semua ekspresi lainnya.
Harus ada implisit cast terdaftar di sistem dari tipe input ke tipe yang diharapkan untuk membuat fungsi menerima (dan mengonversi) nilai input secara diam-diam.
Untuk melihat pemeran mana yang ditentukan untuk timestamp , Anda dapat menanyakan tabel katalog 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
Semua pemeran ini implisit . Per dokumentasi di castcontext :
Menunjukkan dalam konteks apa pemeran dapat dipanggil.
eberarti hanya sebagai pemeran eksplisit (menggunakanCASTatau::sintaksis).aberarti penugasan secara implisit ke kolom target, serta secara eksplisit.iberarti secara implisit dalam ekspresi, serta kasus lainnya.
Penekanan saya yang berani.