Using current time in UTC as default value in PostgreSQL

前端 未结 6 456
北海茫月
北海茫月 2020-12-22 17:28

I have a column of the TIMESTAMP WITHOUT TIME ZONE type and would like to have that default to the current time in UTC. Getting the current time in UTC is easy:

6条回答
  •  囚心锁ツ
    2020-12-22 18:10

    These are 2 equivalent solutions:

    (in the following code, you should substitute 'UTC' for zone and now() for timestamp)

    1. timestamp AT TIME ZONE zone - SQL-standard-conforming
    2. timezone(zone, timestamp) - arguably more readable

    The function timezone(zone, timestamp) is equivalent to the SQL-conforming construct timestamp AT TIME ZONE zone.


    Explanation:

    • zone can be specified either as a text string (e.g., 'UTC') or as an interval (e.g., INTERVAL '-08:00') - here is a list of all available time zones
    • timestamp can be any value of type timestamp
    • now() returns a value of type timestamp (just what we need) with your database's default time zone attached (e.g. 2018-11-11T12:07:22.3+05:00).
    • timezone('UTC', now()) turns our current time (of type timestamp with time zone) into the timezonless equivalent in UTC.
      E.g., SELECT timestamp with time zone '2020-03-16 15:00:00-05' AT TIME ZONE 'UTC' will return 2020-03-16T20:00:00Z.

    Docs: timezone()

提交回复
热议问题