Từ TFM, điểm nổi bật của tôi:
9.9.4. Ngày / Giờ hiện tại
PostgreSQL cung cấp một số hàm trả về giá trị liên quan đến ngày và giờ hiện tại. Các hàm chuẩn SQL này phân bổ các giá trị dựa trên thời gian bắt đầu của giao dịch hiện tại :
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME(precision) CURRENT_TIMESTAMP(precision) LOCALTIME LOCALTIMESTAMP LOCALTIME(precision) LOCALTIMESTAMP(precision)
...
Vì các hàm này trả về thời gian bắt đầu của giao dịch hiện tại, nên giá trị của chúng không thay đổi trong quá trình giao dịch. Đây được coi là một tính năng:mục đích là cho phép một giao dịch viên duy nhất có khái niệm nhất quán về thời gian "hiện tại", để nhiều sửa đổi trong cùng một giao dịch có cùng dấu thời gian.
PostgreSQL cũng cung cấp các hàm trả về thời gian bắt đầu của câu lệnh hiện tại, cũng như thời gian hiện tại thực tế tại thời điểm mà hàm được gọi. Danh sách đầy đủ các hàm thời gian không theo chuẩn SQL là:
transaction_timestamp() statement_timestamp() clock_timestamp() timeofday() now()
transaction_timestamp()
tương đương vớiCURRENT_TIMESTAMP
, nhưng được đặt tên để phản ánh rõ ràng những gì nó trả về.statement_timestamp()
trả về thời gian bắt đầu của câu lệnh hiện tại (cụ thể hơn là thời gian nhận được thông báo lệnh mới nhất từ máy khách).statement_timestamp()
vàtransaction_timestamp()
trả về cùng một giá trị trong lệnh đầu tiên của một giao dịch, nhưng có thể khác với các lệnh tiếp theo.clock_timestamp()
trả về thời gian hiện tại thực tế , và do đó giá trị của nó thay đổi ngay cả trong một lệnh SQL.timeofday()
là một hàm PostgreSQL lịch sử. Giống nhưclock_timestamp()
, nó trả về thời gian hiện tại thực tế, nhưng dưới dạng chuỗi văn bản được định dạng chứ không phải là dấu thời gian có giá trị múi giờ.now()
là một PostgreSQL truyền thống tương đương vớitransaction_timestamp()
.