如何使表列在插入过程中始终使用默认值?

时间:2019-06-09 16:12:39

标签: sql postgresql

我想要一个时间戳记列,该列的值始终是创建时(由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 |
+----------------------------+

3 个答案:

答案 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标准的一部分。