PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào Now () Hoạt động trong PostgreSQL

Trong PostgreSQL, now() hàm trả về ngày và giờ hiện tại (bao gồm cả độ lệch múi giờ), khi bắt đầu giao dịch hiện tại.

Nó tương đương với transaction_timestamp() chức năng.

Nó cũng tương tự như current_timestamp hàm (khi được gọi mà không có đối số).

now() hàm không chấp nhận bất kỳ tham số nào, vì vậy bạn không thể chỉ định độ chính xác của nó, trong khi current_timestamp có thể được gọi có hoặc không có tham số chính xác.

Ngoài ra, now() không phải là chuẩn SQL (cũng như transaction_timestamp() chức năng).

Cú pháp

Cú pháp như sau:

now()

Không có đối số nào được yêu cầu hoặc chấp nhận.

Ví dụ cơ bản

Đây là một ví dụ cơ bản để chứng minh.

SELECT now();

Kết quả:

2020-07-02 09:51:12.088506+10

Trong một giao dịch

Dưới đây là một ví dụ để chứng minh cách nó hoạt động trong một giao dịch.

BEGIN;
SELECT now();
SELECT pg_sleep(5);
SELECT now();
SELECT pg_sleep(5);
SELECT now();
COMMIT;

Đây là đầu ra đầy đủ trong thiết bị đầu cuối của tôi khi sử dụng psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT now();
              now              
-------------------------------
 2020-07-02 09:51:53.905091+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT now();
              now              
-------------------------------
 2020-07-02 09:51:53.905091+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT now();
              now              
-------------------------------
 2020-07-02 09:51:53.905091+10
(1 row)


postgres=# COMMIT;
COMMIT

Cả ba giá trị thời gian đều giống hệt nhau, mặc dù pg_sleep() hàm được sử dụng để trì hoãn việc thực thi giữa mỗi lần gọi tới now() , mỗi câu lệnh trong số đó đều nằm trong câu lệnh SQL của riêng nó.

Vì vậy, chúng ta có thể thấy rằng thời gian trả về cho mỗi câu lệnh dựa trên thời gian bắt đầu của giao dịch hiện tại - không phải câu lệnh. Nó không thay đổi khi giao dịch tiến triển.

Điều này cho phép một giao dịch duy nhất có khái niệm nhất quán về thời gian “hiện tại”, do đó, nhiều sửa đổi trong cùng một giao dịch có cùng dấu thời gian.

Nhiều cuộc gọi trong một câu lệnh

Nó cũng không thay đổi khi câu lệnh diễn ra.

\x
SELECT 
  now(),
  pg_sleep(5),
  now(),
  pg_sleep(5),
  now();

Kết quả (sử dụng đầu ra dọc):

now      | 2020-07-02 09:53:33.766806+10
pg_sleep | 
now      | 2020-07-02 09:53:33.766806+10
pg_sleep | 
now      | 2020-07-02 09:53:33.766806+10

Một lần nữa, cả ba giá trị thời gian đều giống hệt nhau, mặc dù pg_sleep() hàm được sử dụng để trì hoãn việc thực thi giữa mỗi lần gọi tới now() .

Điều này trái ngược với statement_timestamp() , mà hiện thay đổi theo từng câu lệnh và cả clock_timestamp() hàm, thay đổi ngay cả khi nó tiến triển qua mỗi câu lệnh (nếu được gọi nhiều lần trong câu lệnh).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trong PostgreSQL, làm thế nào để chèn dữ liệu bằng lệnh COPY?

  2. Quét đống Bitmap trong một kế hoạch truy vấn là gì?

  3. SQL Transpose các hàng dưới dạng cột

  4. PostgreSQL:ERROR:42601:cần có danh sách định nghĩa cột cho các hàm trả về bản ghi

  5. Tổng quan về các phương thức JOIN trong PostgreSQL