仅为新行添加带有默认NOW()的timestamp列

时间:2016-08-12 10:44:03

标签: postgresql

我有一个有数千行的表。由于表最初不是使用created_at列构造的,因此无法获取其创建时间戳。尽管开始获取未来行的时间戳是至关重要的。

有没有办法可以添加一个默认值为NOW()的时间戳列,以便它不会将值填充到以前的行,而只会填充以后的行?

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

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

3 个答案:

答案 0 :(得分:27)

您可以使用alter table

添加默认规则
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

然后立即将所有当前现有行设置为null:

UPDATE mytable SET created_at = NULL

然后从DEFAULT开始生效。

答案 1 :(得分:0)

尝试类似: -

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

table_name替换为您的表名。

答案 2 :(得分:-1)

例如,我将如下创建一个名为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()
);

谢谢