[postgresql] 새 행에 대해서만 기본 NOW ()로 타임 스탬프 열 추가

수천 개의 행이있는 테이블이 있습니다. 테이블은 처음에 created_at 열로 생성되지 않았기 때문에 생성 타임 스탬프를 얻을 수있는 방법이 없습니다. 미래의 행에 대한 타임 스탬프를 시작하는 것이 중요합니다.

기본값 NOW ()로 타임 스탬프 열을 추가하여 이전 행에 값을 채우지 않고 미래 행에 대해서만 값을 채울 수있는 방법이 있습니까?

ALTER쿼리를 수행하면 모든 행이 타임 스탬프로 채워집니다.

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()



답변

기본값 인 열을 추가 null한 다음 기본값을 갖도록 열을 변경해야 now()합니다.

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


답변

alter 테이블과 함께 기본 규칙을 추가 할 수 있습니다.

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

그런 다음 현재 모든 기존 행을 즉시 null로 설정합니다.

UPDATE mytable SET created_at = NULL

그러면이 시점부터의 DEFAULT효력이 발생합니다.


답변

예를 들어, 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()
);

감사


답변

다음과 같이 시도하십시오.

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

table_name테이블 이름으로 대체 합니다.


답변