Postgresql

如何在時間戳數組中設置預設的 now() 時間戳?

  • December 30, 2017

我想要一個時間戳數組來跟踪一系列事件。第一個事件總是在創建行時發生,所以我希望使用初始預設值來實例化數組。我已經嘗試了這兩件事,它們都導致在now()聲明時被執行。我有可能用一個簡單的預設值來實現這一點,還是我需要寫一個鉤子?

# ALTER TABLE messages ADD COLUMN testarray TIMESTAMP[] DEFAULT '{NOW()}';
ALTER TABLE
# ALTER TABLE messages ADD COLUMN testarray2 TIMESTAMP[] DEFAULT '{"NOW()"}';
ALTER TABLE


freedom_development=# \d messages
                                                Table "public.messages"
   Column     |             Type              |                                Modifiers                                
---------------+-------------------------------+-------------------------------------------------------------------------
id            | integer                       | not null default nextval('messages_id_seq'::regclass)
testarray     | timestamp without time zone[] | default '{"2017-12-30 21:00:09.622951"}'::timestamp without time zone[]
testarray2    | timestamp without time zone[] | default '{"2017-12-30 21:00:19.936001"}'::timestamp without time zone[]

您需要使用以下array[]語法:

create table messages(
   id serial primary key,
   val text not null,
   testarray timestamp[] not null default array[now()]
);

insert into messages(val) values ('blah');

select * from messages;

http://sqlfiddle.com/#!17/c3a31/4

引用自:https://dba.stackexchange.com/questions/194248