我有一个有数千行的表。由于最初没有使用 create _ at 列构建表,因此无法获得它们的创建时间戳。不过,开始获取未来行的时间戳是至关重要的。
有没有一种方法,我可以添加一个时间戳列与默认值 NOW () ,使它不会填充的值以前的行,但只为未来的?
如果执行 ALTER查询,它将用时间戳填充所有行:
ALTER
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
您可以使用 alter 表添加默认规则,
然后立即将所有当前存在的行设置为 null:
UPDATE mytable SET created_at = NULL
然后从这一点上对 DEFAULT将生效。
DEFAULT
试试这样:-
ALTER TABLE table_name ADD CONSTRAINT [DF_table_name_Created] DEFAULT (getdate()) FOR [created_at];
将 table_name替换为表的名称。
table_name
您需要添加默认值为 null的列,然后将该列更改为默认值为 now()。
null
now()
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP; ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
例如,我将如下所示创建一个名为 users的表,并为名为 date的列提供一个默认值 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 添加在时间戳默认情况下接收到的列()