添加时间戳列与默认的 NOW ()为新的行只

我有一个有数千行的表。由于最初没有使用 create _ at 列构建表,因此无法获得它们的创建时间戳。不过,开始获取未来行的时间戳是至关重要的。

有没有一种方法,我可以添加一个时间戳列与默认值 NOW () ,使它不会填充的值以前的行,但只为未来的?

如果执行 ALTER查询,它将用时间戳填充所有行:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
223010 次浏览

您可以使用 alter 表添加默认规则,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

然后立即将所有当前存在的行设置为 null:

UPDATE mytable SET created_at = NULL

然后从这一点上对 DEFAULT将生效。

试试这样:-

ALTER TABLE table_name ADD  CONSTRAINT [DF_table_name_Created]
DEFAULT (getdate()) FOR [created_at];

table_name替换为表的名称。

您需要添加默认值为 null的列,然后将该列更改为默认值为 now()

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();

例如,我将如下所示创建一个名为 users的表,并为名为 date的列提供一个默认值 NOW()

create table users_parent (
user_id     varchar(50),
full_name   varchar(240),
login_id_1  varchar(50),
date        timestamp NOT NULL DEFAULT NOW()
);

谢谢

小优化。

select pg_typeof(now());   --returns: timestamp with time zone. So now include timezone.

所以最好用时间戳。

begin;
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMPTZ;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
commit;

这个代码对我很有用

更改表 ABC 添加在时间戳默认情况下接收到的列()