我该如何在PostgreSQL中实现这个功能?
我想要创建一个表,其中包含一个时间戳字段,它会在插入时自动获取now()的值。时间戳永远不会被更新。我认为我需要创建一个触发器来完成这个操作。如果有更简单的方法,请告知。
或者,将列设置为默认值为now,然后在没有指定时间戳列的情况下进行插入,以便它获取默认值?
创建表foo(q_i_time timestamp with time zone not null default now(),someval int);
我想要创建一个表,其中包含一个时间戳字段,它会在插入时自动获取now()的值。时间戳永远不会被更新。我认为我需要创建一个触发器来完成这个操作。如果有更简单的方法,请告知。
或者,将列设置为默认值为now,然后在没有指定时间戳列的情况下进行插入,以便它获取默认值?
创建表foo(q_i_time timestamp with time zone not null default now(),someval int);
CREATE TABLE
billing=# insert into foo (someval) values (22);
INSERT 0 1
billing=# insert into foo (someval) values (26);
INSERT 0 1
billing=# insert into foo (someval) values (1);
INSERT 0 1
billing=# select * from foo;
q_i_time | someval
-------------------------------+---------
2008-02-25 17:23:03.247619-08 | 22
2008-02-25 17:23:07.43922-08 | 26
2008-02-25 17:23:10.111189-08 | 1
(3 rows)
这个自动填充时间戳列可以作为主键吗?
谢谢提前。
serial
。这是一种情况,自然键(时间戳)由于技术限制而不完美。特别是在 Windows 上,时间戳精度最多只有 1 毫秒(直到 PostgreSQL 9.5 在 Windows 8 上改进),因此冲突很可能发生。这正是像serial
列这样的代理键适用的时候。 - Craig Ringer