programing

새 행에 대해서만 기본 NOW()가 있는 타임스탬프 열

muds 2023. 5. 1. 22:06
반응형

새 행에 대해서만 기본 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 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()
);

감사해요.

사소한 최적화

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;

다음과 같은 것을 시도해 보십시오.

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

대체의table_name당신의 테이블 이름과 함께.

언급URL : https://stackoverflow.com/questions/38916063/add-timestamp-column-with-default-now-for-new-rows-only

반응형