4

ドキュメンテーションforgenerate_seriesは、引数がintor bigintforgenerate_series(start, stop)およびgenerate_series(start, stop, step)case およびtimestampor timestamp with time zoneforである可能性があると述べていますgenerate_series(start, stop, step interval)

type を input としてgenerate_seriesも機能し、 return を返す理由は何ですか?datetimestamp with timezone

pg=# select generate_series('2014-01-01'::date,'2014-01-02'::date,'1 day');
    generate_series     
------------------------
 2014-01-01 00:00:00+01
 2014-01-02 00:00:00+01
(2 rows)
4

1 に答える 1

8

関数の型解決のおかげで、 fromとfrom の暗黙のキャストがあるため、 にもdate値を 渡すことができます。あいまいですが、「日付/時刻型」の中で「優先」されます。詳細な説明:generate_series()datetimestampdatetimestamptztimestamptz

裸の場合、キャストではdate現地時間が想定されます。'2014-01-10 00:00' は、東京ではニューヨークとは異なる時点を表すため、入力として00:00使用する場合は、現在のタイム ゾーン設定が結果に直接影響することに注意してください。date

Postgres は受け入れ可能な型をどのように決定しますか?

Postgres は基本的に3 種類のキャストを区別します。

Explicit casts..CASTまたは::構文を使用する場合。
Assignment cast.. 値がターゲット列に割り当てられるときの暗黙のキャスト。
Implicit cast.. 他のすべての式での暗黙のキャスト。

関数が暗黙のうちに入力値を受け入れる (そして変換する) ようにするには、入力型から予期される型への暗黙的なキャストがシステムに登録されている必要があります。

どのキャストが に定義されているかを確認するに timestamptz、カタログ テーブルにクエリを実行できます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

これらのキャストはすべて暗黙的です。のドキュメントごとcastcontext:

キャストを呼び出すことができるコンテキストを示します。e明示的なキャスト (CASTまたは::構文を使用) としてのみ意味します。a明示的にだけでなく、ターゲット列への代入で暗黙的にも意味します。iは、他の場合と同様に、式で暗黙的に意味します。

大胆強調鉱山。

于 2014-01-10T18:00:10.547 に答える