Re: Default for date field: today vs CURRENT_DATE
| От | Tom Lane |
|---|---|
| Тема | Re: Default for date field: today vs CURRENT_DATE |
| Дата | |
| Msg-id | 10029.1546466474@sss.pgh.pa.us обсуждение |
| Ответ на | Default for date field: today vs CURRENT_DATE (Rich Shepard <rshepard@appl-ecosys.com>) |
| Ответы |
Re: Default for date field: today vs CURRENT_DATE [RESOLVED]
|
| Список | pgsql-general |
Rich Shepard <rshepard@appl-ecosys.com> writes:
> Reading the manual I saw that 'today' is a special value, but it did not
> work when I used it as a column default; e.g.,
> start_date date DEFAULT today,
> Appending parentheses also failed. But, changing today to CURRENT_DATE
> worked. I've not found an explanation and would appreciate learning why
> 'today' fails.
'today' is special as a date input string, so you can use it as a literal:
regression=# select 'today'::date;
date
------------
2019-01-02
(1 row)
But it's not a SQL keyword, nor a function name, so you can't write it
without quotes.
Also, it wouldn't be very useful for this purpose, because it's resolved
on sight in date_in(). Thus
regression=# create table wrong_thing (start_date date DEFAULT 'today');
CREATE TABLE
regression=# \d wrong_thing
Table "public.wrong_thing"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+--------------------
start_date | date | | | '2019-01-02'::date
The default would effectively be the creation date of the table,
not the insertion date of any particular row.
So CURRENT_DATE or one of its sibling functions is what you want
here. On the other hand, something like
INSERT INTO my_table VALUES ('today', ...);
might be perfectly sensible code.
regards, tom lane
В списке pgsql-general по дате отправления: