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

Cách current_timestamp () hoạt động trong PostgreSQL

Trong PostgreSQL, current_timestamp() hàm trả về ngày và giờ hiện tại, bao gồm cả độ lệch múi giờ.

Dấu thời gian được trả về dựa trên thời gian bắt đầu của giao dịch hiện tại.

Cú pháp

Bạn có thể sử dụng nó theo một trong những cách sau:

current_timestamp
current_timestamp(x)

Ở đâu x là một tham số chính xác tùy chọn, làm cho kết quả được làm tròn thành x số chữ số phân số trong trường giây.

Nếu không có tham số chính xác (cú pháp đầu tiên), kết quả được cung cấp cho độ chính xác đầy đủ có sẵn.

Ví dụ - Độ chính xác đầy đủ

Dưới đây là một ví dụ cơ bản để chứng minh kết quả sử dụng độ chính xác đầy đủ có sẵn.

SELECT current_timestamp;

Kết quả:

2020-07-01 15:42:35.630594+10

Ví dụ - Độ chính xác cụ thể

Dưới đây là một ví dụ để minh họa cách chỉ định độ chính xác.

SELECT current_timestamp(0);

Kết quả:

2020-07-01 15:42:58+10

Trong ví dụ này, tôi đã chỉ định độ chính xác bằng 0, có nghĩa là không có giây phân số nào được trả về.

Đây là một ví dụ khác mà tôi chỉ định một số giây phân số.

SELECT current_timestamp(3);

Kết quả:

2020-07-01 15:43:16.644+10

Giao dịch

Dấu thời gian thực tế dựa trên thời gian bắt đầu của giao dịch hiện tại. Do đó, 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.

Dưới đây là một ví dụ chứng minh điều này.

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

Đây là kết quả đầu ra đầy đủ của thiết bị đầu cuối của tôi khi thực hiện giao dịch đó trong psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# COMMIT;
COMMIT

Cả ba giá trị thời gian đều giống hệt nhau, mặc dù pg_sleep() đã được sử dụng để trì hoãn việc thực thi giữa mỗi câu lệnh trong giao dịch.

Điều này trái ngược với statement_timestamp() cái nào hiện thay đổi theo từng câu lệnh.

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 
  current_timestamp,
  pg_sleep(5),
  current_timestamp,
  pg_sleep(5),
  current_timestamp;

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

current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10

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 đến current_timestamp .

Điều này trái ngược với clock_timestamp() chức năng nào không thay đổi khi nó tiến triển qua câu lệnh.

Nhân tiện, tôi đã sử dụng đầu ra dọc (còn được gọi là đầu ra mở rộng) để làm cho kết quả nhỏ gọn hơn một chút.

Bạn có thể chuyển đổi đầu ra mở rộng trong psql bằng cách sử dụng \x .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cấu hình PostgreSQL Sharding với ClusterControl

  2. Điều kiện đếm ở đâu PostgreSQL

  3. Làm cách nào tôi có thể đảm bảo rằng một chế độ xem cụ thể hóa luôn được cập nhật?

  4. Điểm chuẩn Postgres-XL

  5. Cách duy trì dữ liệu trong cơ sở dữ liệu postgres dày đặc bằng cách sử dụng khối lượng