Bài toán
Khi viết function trong PostgreSQL, đôi khi bạn muốn tính xem bước này, bước kia chạy mất bao lâu. Tuy nhiên, việc tưởng chừng như rất đơn giản này, lại có thể khiến bạn bối rối nếu chưa biết đấy.
Theo logic thông thường thì chỉ cần dùng hàm now() để lấy ra giá trị thời gian hiện tại
Kiểu như thế này:
CREATE OR REPLACE PROCEDURE public.pr_test()
LANGUAGE plpgsql
AS $procedure$
declare
begin_time timestamp ;
end_time timestamp ;
r record;
begin
begin_time := now() at time zone 'Asia/Ho_Chi_Minh';
-- In begin_time ra
raise notice 'Begin time: %', begin_time;
select * into r from khach_hang;
end_time := now() at time zone 'Asia/Ho_Chi_Minh';
-- In end_time ra
raise notice 'End time: %', end_time;
$procedure$
;
Giả sử trong function này, tôi muốn tính ra bước này chạy hết bao nhiêu thời gian :
select * into r from customer;
Nên tôi đặt 2 biến begin_time và end_time vào để tính thời gian bắt đầu và kết thúc.
Tuy nhiên, khi chạy xong thủ tục, bạn sẽ thấy begin_time và end_time hoàn toàn giống nhau
call public.pr_test();
Output:
Begin time: 2021-04-06 11:02:49.616143
End time: 2021-04-06 11:02:49.616143
Nguyên nhân
Nguyên nhân của việc này là, trong khi chạy trong thân function, hàm now() sẽ bị “đóng băng thời gian” nên chỉ lấy được thời gian ở thời điểm bắt đầu chạy function thôi.
Giải quyết
Để giải quyết vấn đề này, tôi sử dụng hàm clock_timestamp()
CREATE OR REPLACE PROCEDURE public.pr_test()
LANGUAGE plpgsql
AS $procedure$
declare
begin_time timestamp ;
end_time timestamp ;
r record;
begin
begin_time := clock_timestamp();
-- In begin_time ra
raise notice 'Begin time: %', begin_time;
select * into r from khach_hang;
end_time := clock_timestamp();
-- In end_time ra
raise notice 'End time: %', end_time;
$procedure$
;
Và kết quả như sau:
call public.pr_test();
Output:
Begin time: 2021-04-06 11:02:49.532654
End time: 2021-04-06 11:05:32.631245
Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.
Tặng bạn khoá học “Linux thật là đơn giản” hoàn toàn miễn phí. Khoá học này sẽ giúp bạn nắm được các kiến thức quan trọng nhất để học tập các kỹ năng cao hơn về Database.
Nguồn: https://dangxuanduy.com/
Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.
Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
Hiện thời chưa biết viết gì về bản thân...thôi viết sau vậy...
Latest posts by Đặng Xuân Duy
(see all)
Bài viết liên quan
-
Hướng dẫn cài đặt PostgreSQL trên CentOS 7Cài đặt PostgreSQL trên CentOS 7 là vô cùng dễ dàng. Chỉ cần bạn đã có kiến thức nền tảng về hệ điều hành Linux là đã có thể cài đặt được 1 hệ thống PostgreSQL được rồi. Download PostgreSQL Đầu tiên, bạn vào link sau để đến trang…
-
Lộ trình trở thành PostgreSQL DBA Giới thiệu Mục đích của bài viết này là cung cấp cho bạn hình dung về công việc quản trị PostgreSQL Database (Database Administrator - DBA) và giúp định hướng việc học của bạn nếu bạn còn bối rối. Học các thuật ngữ và khái niệm…
-
PostgreSQL là gì? PostgreSQL là gì? PostgreSQL (đọc là Post-grez, đôi khi có người đọc là Post-gri) là một hệ quản trị Cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở, có thể chạy trên rất nhiều hệ điều hành (Windows, RedHat, Ubuntu,...) Một trong những lợi ích rõ…
-
PostgreSQL là gì? PostgreSQL là gì? PostgreSQL (đọc là Post-grez, đôi khi có người đọc là Post-gri) là một hệ quản trị Cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở, có thể chạy trên rất nhiều hệ điều hành (Windows, RedHat, Ubuntu,...) Một trong những lợi ích rõ…
-
Cấu hình để kết nối với PostgreSQL từ bên ngoài Giới thiệu Mặc định, sau khi cài đặt PostgreSQL, bạn chỉ có thể kết nối đến database từ localhost (tức là máy chủ hiện đang cài đặt PostgreSQL) Tất nhiên là để kết nối được (kể cả trong localhost) bạn phải khởi động PostgreSQL lên trước đó…
-
Lộ trình trở thành PostgreSQL DBA Giới thiệu Mục đích của bài viết này là cung cấp cho bạn hình dung về công việc quản trị PostgreSQL Database (Database Administrator - DBA) và giúp định hướng việc học của bạn nếu bạn còn bối rối. Học các thuật ngữ và khái niệm…
-
Hướng dẫn cài đặt PostgreSQL trên CentOS 7Cài đặt PostgreSQL trên CentOS 7 là vô cùng dễ dàng. Chỉ cần bạn đã có kiến thức nền tảng về hệ điều hành Linux là đã có thể cài đặt được 1 hệ thống PostgreSQL được rồi. Download PostgreSQL Đầu tiên, bạn vào link sau để đến trang…