1.使用默认值(Default Value) 适用创建时间,即:只适用于新增数据时的操作!
在创建表时,为时间字段设置默认值。.
CREATE TABLE your_table_name (
id SERIAL PRIMARY KEY,
data VARCHAR(255),
timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
);
如果已经有一张表,可以使用ALTER TABLE语句来添加默认值。
ALTER TABLE your_table_name ALTER COLUMN timestamp_column SET DEFAULT CURRENT_TIMESTAMP;
这样,每当您插入一个新的行时,时间字段将自动设置为当前时间戳。
2:使用触发器(Trigger) 适用更新时间
创建一个触发器函数,该函数将在INSERT或UPDATE操作时被调用。
CREATE OR REPLACE FUNCTION update_timestamp_column() RETURNS TRIGGER AS $$
BEGIN
NEW.timestamp_column := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
这样,每当在您的表中有INSERT或UPDATE操作时,触发器就会自动更新时间字段。
3、实操一:
-- 类别表
CREATE TABLE categories (
category_id VARCHAR PRIMARY KEY,
category_name VARCHAR NOT NULL,
creator VARCHAR NOT NULL,
update_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE categories IS '存储所有项目类别信息';
COMMENT ON COLUMN categories.category_id IS '类别唯一标识';
COMMENT ON COLUMN categories.category_name IS '类别名称';
COMMENT ON COLUMN categories.update_timestamp IS '变更发生的时间';
COMMENT ON COLUMN categories.creator IS '创建者';
select category_id,category_id, category_name, creator, update_timestamp from categories;
ALTER TABLE categories ALTER COLUMN update_timestamp SET DEFAULT CURRENT_TIMESTAMP;
CREATE OR REPLACE FUNCTION update_timestamp_column() RETURNS TRIGGER AS $$
BEGIN
NEW.update_timestamp := now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--
-- DROP TRIGGER IF EXISTS categories
-- ON categories CASCADE;
CREATE TRIGGER categories
BEFORE INSERT OR UPDATE ON categories
FOR EACH ROW
EXECUTE FUNCTION update_timestamp_column();
实操二:
drop TABLE if exists sales_planning;
CREATE TABLE sales_planning (
id VARCHAR(255) NOT NULL,
year VARCHAR(255) NOT NULL,
month VARCHAR(255) NOT NULL,
company_name VARCHAR(255) NOT NULL,
planned_sales_amount NUMERIC(15, 2) NOT NULL,
planned_sales_volume INT NOT NULL,
create_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
modified_by VARCHAR(255) NOT NULL,
PRIMARY KEY (id, year, month, company_name)
);
COMMENT ON TABLE sales_planning IS '存储公司销售计划的表';
COMMENT ON COLUMN sales_planning.id IS '唯一标识符';
COMMENT ON COLUMN sales_planning.year IS '年份';
COMMENT ON COLUMN sales_planning.month IS '月份';
COMMENT ON COLUMN sales_planning.company_name IS '项目公司名称';
COMMENT ON COLUMN sales_planning.planned_sales_amount IS '计划销售金额';
COMMENT ON COLUMN sales_planning.planned_sales_volume IS '计划销售数量';
COMMENT ON COLUMN sales_planning.create_timestamp IS '记录创建的时间';
COMMENT ON COLUMN sales_planning.update_timestamp IS '记录最后更新的时间';
COMMENT ON COLUMN sales_planning.modified_by IS '记录最后修改人的用户名';
-- 创建用于更新修改时间的触发器函数
CREATE OR REPLACE FUNCTION update_time_column() RETURNS TRIGGER AS $$
BEGIN
NEW.update_time := now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 为sales_planning表添加更新修改时间的触发器
CREATE TRIGGER corporate_regulations
BEFORE UPDATE ON corporate_regulations
FOR EACH ROW
EXECUTE FUNCTION update_time_column();
DROP TRIGGER IF EXISTS corporate_regulations
ON corporate_regulations ;