圈子推荐
查看所有吧>>
活跃用户
    存储过程中不可使用now()

    使用存储过程记录操作时间时,发现所有的时间输出结果相同:

    1、函数样例如下:

    CREATE OR REPLACE FUNCTION test()

    RETURNS void AS

    $BODY$

    BEGIN

    --create table tt2(id serial, c1 timestamp(6));

    insert into tt2(c1) select now();

    perform pg_sleep(1);

    insert into tt2(c1) select now();

    END;

    $BODY$

    LANGUAGE 'plpgsql' ;


    2、执行函数:

    select test();


    3、查询tt2表记录,发现存储过程中前后两条插入当前时间now()的输出结果相同。

    id |                c1

    -----------------------------------

    1  |  2021-02-26 15:59:44,962395

    2  |  2021-02-26 15:59:44,962395


    4、为避免出现此类问题,应调整存储过程,不在存储过程中使用now()函数,改用clock_timestamp()即可。

    CREATE OR REPLACE FUNCTION test()

    RETURNS void AS

    $BODY$

    BEGIN

    --create table tt2(id serial, c1 timestamp(6));

    insert into tt2(c1) select clock_timestamp();

    perform pg_sleep(1);

    insert into tt2(c1) select clock_timestamp();

    END;

    $BODY$

    LANGUAGE 'plpgsql' ;


    • 分享到:
    排序方式:回复时间 共有0条评论