Название: Автоматическая вставка Даты-Время? Отправлено: Martiro от Июль 31, 2008, 12:55 Реально ли запрограммировать ячейку так, чтобы при создании новой записи, в эту ячейку автоматом записывалось дата и время создания записи (в формате timestamp)?
Линтер-ВС (PostgreSQL 7) Название: Re: Автоматическая вставка Даты-Время? Отправлено: Пантер от Июль 31, 2008, 13:31 У поля БД есть понятие default - это оно?
Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Июль 31, 2008, 13:38 а заюзать PL/SQL триггер BEFORE INSERT?
Название: Re: Автоматическая вставка Даты-Время? Отправлено: Martiro от Июль 31, 2008, 13:50 Что заdefault ?
Как прописать правильно этот тригер BEFORE INSERT? А то документации под рукой нет... Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Июль 31, 2008, 13:59 документация http://www.postgresql.org/docs/7.4/interactive/sql-createtrigger.html (http://www.postgresql.org/docs/7.4/interactive/sql-createtrigger.html)
Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Июль 31, 2008, 14:03 default-значение задается при создании таблицы в конструкции CREATE TABLE или ALTER TABLE для конкретного поля.
например: Код: CREATE TABLE "users" но я так понимаю в вашей ситуации это не кактит, т.к. надо задавать дату при создании строки, я правильно понял? Название: Re: Автоматическая вставка Даты-Время? Отправлено: Martiro от Июль 31, 2008, 14:24 Да, не катит.
Нужно при добавлении записи в таблицу, автоматом заполнить последнее поле. Я так понимаю, выглядеть это будет примерно так: CREATE TRIGGER tab_dt_ins BEFORE INSERT OR UPDATE ON table1 ? ? ? А как дальше писать? Функция, которую нужно использовать это "current_timestamp"? Или нужно свою прописывать? Название: Re: Автоматическая вставка Даты-Время? Отправлено: Admin от Июль 31, 2008, 14:30 чем не катит в default поставить NOW()?
это для UPDATE нужно тригер вставлять Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Июль 31, 2008, 14:30 этой функции будет достаточно http://www.postgresql.org/docs/7.4/interactive/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT (http://www.postgresql.org/docs/7.4/interactive/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT)
Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Июль 31, 2008, 14:45 чем не катит в default поставить NOW()? это для UPDATE нужно тригер вставлять тоже вариант :) Название: Re: Автоматическая вставка Даты-Время? Отправлено: Admin от Июль 31, 2008, 16:34 радует что народ postgres пользует
а то для веба все mysql да mysql Название: Re: Автоматическая вставка Даты-Время? Отправлено: Martiro от Август 01, 2008, 09:03 Я так понимаю, мы пришли к тому, что в моем случае при создании таблицы нужно в DEFAULT писать NOW() или CURRENT_TIMESTAMP:
Код: CREATE TABLE "users" Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Август 01, 2008, 09:14 попробуй так:
Код: CREATE TABLE "users" ( Название: Re: Автоматическая вставка Даты-Время? Отправлено: Martiro от Август 01, 2008, 09:36 Да... работает. В консоле все ОК, а вот из приложения не получается.
Делаю все на QT3. Записи вставляю с помощью QSqlRecord::setValue(...); для каждого поля: Код: curRecord->setValue(fieldUserNumb, iNumber); Название: Re: Автоматическая вставка Даты-Время? Отправлено: spirit от Август 01, 2008, 09:40 Да... работает. В консоле все ОК, а вот из приложения не получается. код отвечает за инсерт или за апдейт?Делаю все на QT3. Записи вставляю с помощью QSqlRecord::setValue(...); для каждого поля: Код: curRecord->setValue(fieldUserNumb, iNumber); Название: Re: Автоматическая вставка Даты-Время? Отправлено: Martiro от Август 01, 2008, 09:46 Да... скорее всего в этом и дело. Покапавшись, понял, что скорее всего запись сначала создается, а потом обновляется из буфера. :(
А как через тригер? Название: Re: Автоматическая вставка Даты-Время? Отправлено: Tonal от Август 02, 2008, 08:08 Похоже, оно при формировании инсерта указывает все поля, и несбинденным подставляет NULL - т.е. значение DEFAULT для поля не учитывается.
Нужно посмотреть (в ассистенте и исходниках), можно ли изменить это поведение - т.е. не указывать несбинденные поля. Если нет, придётся или формировать инсерт вручную, или писать триггер. |