我想要一个时间戳记列,该列的值始终是创建时(由default current_timestamp
子句指定)的那一刻,客户端特权值被忽略或导致错误。
create table test
(
creation_time timestamp default current_timestamp
);
insert into test(creation_time)
values (make_timestamp(1999, 1, 8, 1, 1, 1));
After exection, the table is:
+----------------------------+
| creation_time |
| 1999-01-08 01:01:01.000000 |
+----------------------------+
What I want is :
+----------------------------+
| creation_time |
| 2019-06-09 16:07:01.780816 |
+----------------------------+
答案 0 :(得分:2)
使用默认值是不可能的。
您应该创建一个设置时间戳的触发器。
答案 1 :(得分:2)
Impaler的方法很好。如果这样做,最简单的做法就是忽略该值:
insert into test (col)
values (<value>);
或者,如果您真的想特定于Postgres,而没有其他列:
insert into test
select;
编辑:
我建议您避免直接插入表中,而只允许通过视图进行更新:
create view v_test as
select . . . -- all columns but the timestamp
from test;
然后仅允许通过视图进行更新。
答案 2 :(得分:1)
使用DEFAULT
关键字,如下所示:
insert into test(creation_time)
values (default);
DEFAULT
是SQL标准的一部分。