How do I automatically update a timestamp in PostgreSQL

后端 未结 4 570
执念已碎
执念已碎 2020-12-07 08:15

I want the code to be able to automatically update the time stamp when a new row is inserted as I can do in MySQL using CURRENT_TIMESTAMP.

How will I be able to achi

相关标签:
4条回答
  • 2020-12-07 08:38

    To populate the column during insert, use a DEFAULT value:

    CREATE TABLE users (
      id serial not null,
      firstname varchar(100),
      middlename varchar(100),
      lastname varchar(100),
      email varchar(200),
      timestamp timestamp default current_timestamp
    )
    

    Note that the value for that column can explicitly be overwritten by supplying a value in the INSERT statement. If you want to prevent that you do need a trigger.

    You also need a trigger if you need to update that column whenever the row is updated (as mentioned by E.J. Brennan)

    Note that using reserved words for column names is usually not a good idea. You should find a different name than timestamp

    0 讨论(0)
  • 2020-12-07 08:49

    Using 'now()' as default value automatically generates time-stamp.

    0 讨论(0)
  • 2020-12-07 08:54

    Updating timestamp, only if the values changed

    Based on E.J's link and add a if statement from this link (https://stackoverflow.com/a/3084254/1526023)

    CREATE OR REPLACE FUNCTION update_modified_column()
    RETURNS TRIGGER AS $$
    BEGIN
       IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN
          NEW.modified = now(); 
          RETURN NEW;
       ELSE
          RETURN OLD;
       END IF;
    END;
    $$ language 'plpgsql';
    
    0 讨论(0)
  • 2020-12-07 08:55

    You'll need to write an insert trigger, and possible an update trigger if you want it to change when the record is changed. This article explains it quite nicely:

    http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/

    CREATE OR REPLACE FUNCTION update_modified_column()   
    RETURNS TRIGGER AS $$
    BEGIN
        NEW.modified = now();
        RETURN NEW;   
    END;
    $$ language 'plpgsql';
    

    Apply the trigger like this:

    CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON customer FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();
    
    0 讨论(0)
提交回复
热议问题