在postgresql 9.2的tztsrange中使用now()作为默认值

在postgresql 9.2的tztsrange中使用now()作为默认值,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,是否可以将now()定义为postgresql 9.2中引入的tztsrange数据类型的起始值?我试着用这个 ALTER TABLE test_table ALTER COLUMN tstz_range SET DEFAULT '[now,infinity]'::tstzrange; 但在这种表达式中,now()通过更改表计算为当前时间戳,默认值始终相同: '["2012-09-18 15:00:47.334196+02",infinity]'::tstzrange; 如上所述,您可以使用

是否可以将
now()
定义为postgresql 9.2中引入的
tztsrange
数据类型的起始值?我试着用这个

ALTER TABLE test_table ALTER COLUMN tstz_range SET DEFAULT '[now,infinity]'::tstzrange;
但在这种表达式中,
now()
通过更改表计算为当前时间戳,默认值始终相同:

'["2012-09-18 15:00:47.334196+02",infinity]'::tstzrange;
如上所述,您可以使用相应的函数定义范围:

SELECT tstzrange(now(), 'infinity', '[)');
┌────────────────────────────────────────────┐
│                 tstzrange                  │
├────────────────────────────────────────────┤
│ ["2012-09-18 15:33:50.186351+00",infinity) │
└────────────────────────────────────────────┘
CREATE TABLE plop (
  id serial PRIMARY KEY, 
  some_range tstzrange DEFAULT tstzrange(now(), 'infinity', '[)')
);
因此,您可以使用以下函数轻松创建默认值:

SELECT tstzrange(now(), 'infinity', '[)');
┌────────────────────────────────────────────┐
│                 tstzrange                  │
├────────────────────────────────────────────┤
│ ["2012-09-18 15:33:50.186351+00",infinity) │
└────────────────────────────────────────────┘
CREATE TABLE plop (
  id serial PRIMARY KEY, 
  some_range tstzrange DEFAULT tstzrange(now(), 'infinity', '[)')
);

谢谢!我试图定义自己的函数,它返回tstzrange,但这个解决方案要优雅得多。