postgres=# create or replace function im_now (text) returns timestamptz as $$ postgres$# select CURRENT_TIMESTAMP; postgres$# $$ language sql strict immutable; CREATEFUNCTION
postgres=# create table test_generated (id int primary key, info text, crt_time timestamp, mod_time timestampGENERATEDALWAYSAS (im_now(null || id || info || crt_time)) stored); CREATETABLE
/*测试在PostgreSQL14版本中需要需要以如下方式去创建, 需要将类型转为text, 去掉空, 并且不包含生成列自身*/ postgres=# create table test_generated (id int primary key, info text, crt_time timestamp, mod_time timestampGENERATEDALWAYSAS (im_now(id::text || info::text)) stored); CREATETABLE
postgres=# table test_generated ; id | info | crt_time | mod_time ----+------+----------+---------- (0rows)
postgres=# insert into test_generated select 1; INSERT01 postgres=# table test_generated ; id | info | crt_time | mod_time ----+------+----------+---------------------------- 1 | | | 2021-04-2114:54:24.886718 (1row)
postgres=# insert into test_generated select 2; INSERT01 postgres=# table test_generated ; id | info | crt_time | mod_time ----+------+----------+---------------------------- 1 | | | 2021-04-2114:54:24.886718 2 | | | 2021-04-2114:54:29.742564 (2rows)
postgres=# update test_generated set info = 'a' where id =1; UPDATE1 postgres=# update test_generated set info = 'a' where id =2; UPDATE1 postgres=# table test_generated ; id | info | crt_time | mod_time ----+------+----------+---------------------------- 1 | a | | 2021-04-2114:54:46.63875 2 | a | | 2021-04-2114:54:48.158909 (2rows)