У меня есть таблица с тысячами строк. Поскольку изначально таблица не была построена с использованием столбца created_at, получить метку времени их создания невозможно. Однако очень важно начать получать метки времени для будущих строк.

Есть ли способ добавить столбец отметки времени со значением по умолчанию NOW (), чтобы он не заполнял значения в предыдущие строки, а только для будущих?

Если я выполняю запрос ALTER, он заполняет все строки меткой времени:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

Artur

Ответов: 6

Ответы (6)

Этот код работал у меня

ALTER TABLE ABC ADD COLUMN получено в TIMESTAMP DEFAULT NOW ()

небольшая оптимизация.

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

Так лучше с timestamptz.

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

Например, я создам таблицу с именем users, как показано ниже, и дам столбцу с именем date значение по умолчанию NOW ()

создать таблицу users_parent (
    user_id varchar (50),
    полное_имя varchar (240),
    login_id_1 varchar (50),
    дата отметка времени НЕ ПУСТО ПО УМОЛЧАНИЮ СЕЙЧАС ()
);

Спасибо

Вам нужно добавить столбец со значением по умолчанию null, затем изменить столбец, чтобы он имел значение по умолчанию now ().

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

Попробуйте что-нибудь вроде: -

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

заменяя table_name именем вашей таблицы.

Вы можете добавить правило по умолчанию с таблицей изменений,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

затем сразу же обнулить все текущие существующие строки:

UPDATE mytable SET created_at = NULL

Затем с этого момента будет действовать ПО УМОЛЧАНИЮ.

2022 WebDevInsider