Обсуждение: schema error upgrading from 7.1 to 7.2

Поиск
Список
Период
Сортировка

schema error upgrading from 7.1 to 7.2

От
Vivek Khera
Дата:
During the upgrade from 7.1.3 to 7.2, I encountered an incompatibility
with the schema defs.

Prior to the upgrade, I used the 7.1.3 pg_dump program to create a
compressed dump:

pg_dump -Fc vk > vk.dump

then, using the 7.2 pg_restore, I exctracted the table schema
definitions:

pg_restore -l vk.dump >vk.1
edit vk.1 to just extract TABLE defs and ACLs (everything prior to
 DATA parts)
pg_restore -L vk.1 vk.dump > vk.schema
psql vk < vk.schema

results in the complaint about 'CURRENT_DATE' as shown in the boiled
down example below.  The line it complains about from the schema is

 "owner_lastbilled" date DEFAULT 'CURRENT_DATE' NOT NULL,

The fix seems to be to remove the single quotes around CURRENT_DATE.
pg_restore should be taught this, I think.

pg_dumpall from 7.1.3 creates the same (now invalid) schema too.

This is not documented in the list of changes to the Schema
Manipulation.



A boiled down example:

khera=> create table foo ("owner_id" integer not null, "owner_lastbilled" date DEFAULT 'CURRENT_DATE' NOT NULL);
ERROR:  Bad date external representation 'CURRENT_DATE'
khera=> create table foo ("owner_id" integer not null, "owner_lastbilled" date DEFAULT CURRENT_DATE NOT NULL);
CREATE
khera=> \d foo
                           Table "foo"
      Column      |  Type   |             Modifiers
------------------+---------+------------------------------------
 owner_id         | integer | not null
 owner_lastbilled | date    | not null default date('now'::text)

khera=> insert into foo (owner_id) values (1);
INSERT 16966 1
khera=> select * from foo;
 owner_id | owner_lastbilled
----------+------------------
        1 | 2002-02-20
(1 row)

khera=> select version();
                              version
-------------------------------------------------------------------
 PostgreSQL 7.2 on i386-unknown-freebsd4.4, compiled by GCC 2.95.3
(1 row)

Re: schema error upgrading from 7.1 to 7.2

От
Tom Lane
Дата:
Vivek Khera <khera@kcilink.com> writes:
>  "owner_lastbilled" date DEFAULT 'CURRENT_DATE' NOT NULL,

The above was never correct.  I believe that 7.1's rather lax date
parser might have interpreted the literal as being 'current'.  7.2's
date parser would reject it, even if 'current' were still an allowed
value, which it is not.

On the other hand, invoking the function CURRENT_DATE

    "owner_lastbilled" date DEFAULT CURRENT_DATE NOT NULL,

was and remains valid.

> This is not documented in the list of changes to the Schema
> Manipulation.

Because it is not one: it is a datatype behavioral change.

            regards, tom lane

Re: schema error upgrading from 7.1 to 7.2

От
Vivek Khera
Дата:
>>>>> "TL" == Tom Lane <tgl@sss.pgh.pa.us> writes:

TL> Vivek Khera <khera@kcilink.com> writes:
>> "owner_lastbilled" date DEFAULT 'CURRENT_DATE' NOT NULL,

TL> The above was never correct.  I believe that 7.1's rather lax date
TL> parser might have interpreted the literal as being 'current'.  7.2's

Then how come pg_dump outputs it that way?  Is it because that's how I
did it when creating the schema in the first place?

I guess I extended putting the quotes around that because of the
warnings about putting quotes around 'NOW()' as a default.  My
mistake...

TL> Because it is not one: it is a datatype behavioral change.

It isn't documented in the HISTORY file in any way shape or form.
Where else should I look for potential traps in validating my app
under 7.2?

Thanks.


Re: schema error upgrading from 7.1 to 7.2

От
Tom Lane
Дата:
Vivek Khera <khera@kcilink.com> writes:
> Then how come pg_dump outputs it that way?  Is it because that's how I
> did it when creating the schema in the first place?

Presumably.

> TL> Because it is not one: it is a datatype behavioral change.

> It isn't documented in the HISTORY file in any way shape or form.

HISTORY says, under "Migration to version 7.2":

     * The date/time value 'current' is no longer available. You will need to
       rewrite your applications.

            regards, tom lane

Re: schema error upgrading from 7.1 to 7.2

От
Vivek Khera
Дата:
>>>>> "TL" == Tom Lane <tgl@sss.pgh.pa.us> writes:

TL> HISTORY says, under "Migration to version 7.2":

TL>      * The date/time value 'current' is no longer available. You
TL>        will need to rewrite your applications.

I see now.  Thanks.  I didn't make the connection between "current"
and "CURRENT_DATE".