Até acredito nisto, todavia, conforme eu explanei nos cenários (1 e 2) não
usei a terceira forma.

Neste caso, eu resolvi eliminando o valor default original e foi recriado
acertadamente.

Foi um caso atípico, mas em todo caso aconteceu eu inclusive simulei
diversas vezes a criação de N tabelas usando valores default para campos do
tipo timestamp, date e em nenhuma das vezes se repetiu.

Minha suspeita poderia recair na ferramenta que usamos (EMS SQL Manager for
PostgreSQL 4.3.0.4), tanto que postei no suporte deles e ainda não
responderam. Vamos esperar para ver (inclusive eu enviei o log detalhado de
criação das tabelas - inclusive a entidade reclamada).

Rubens José Rodrigues


-----Mensagem original-----
De: [email protected]
[mailto:[email protected]] Em nome de Osvaldo
Kussama
Enviada em: terça-feira, 24 de novembro de 2009 09:23
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] RES: Dúvidas quanto aos valores default de
atributo.

2009/11/24 TI <[email protected]>:
> Opa...
>
> Então Tiago, o "agora" que eu mencionei é "agora=data e hora de criação da
entidade" que fica registrado como o valor default para todos os registros
inseridos.
>
> Rubens José Rodrigues
>
> -----Mensagem original-----
> De: [email protected]
[mailto:[email protected]] Em nome de Tiago Adami
> Enviada em: segunda-feira, 23 de novembro de 2009 22:54
> Para: Comunidade PostgreSQL Brasileira
> Assunto: Re: [pgbr-geral] Dúvidas quanto aos valores default de atributo.
>
> 2009/11/20 TI <[email protected]>:
>> Pessoal,
>>
>> Estou com uma dúvida, hoje depois que um usuário veio reclamar de uma
>> entidade denominada nfsaid_sap_hist, onde existe um atributo do tipo
>> timestamp com valor default ‘current_timestamp’, verifiquei que o sistema
>> colocou como valor ‘padrão’ a data hora da criação da entidade e não o
valor
>> de ‘agora’.
>>
>> Testei com o valor default ‘now()’ e acoteceu a mesma coisa.
>>
>> Para resolver eu tive que dropar o atributo e criar novamente, o que pode
>> ter acontecido?
>>
>> *Meu cenário 1 :*
>>
>> PostgreSQL 8.4.1, compiled by Visual C++ build 1400, 32-bit
>>
>> *Meu cenário2 :*
>>
>> PostgreSQL 8.3.8 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real
>> (Ubuntu 4.3.2-1ubuntu11) 4.3.2
>>
>> *Script de criação 1 --> Cenário 1 :*
>>
>> Create table nfsaid_sap_hist (
>>
>> …
>>
>> dtcurhist timestamp default current_timestamp,
>>
>> …
>>
>> *Script de criação 1 --> Cenário 2 :*
>>
>> Create table nfsaid_sap_hist (
>>
>> …
>>
>> dtcurhist timestamp default now(),
>>
>> …
>>
>> O engraçado é que até hoje (depois de anos usando o PostgreSQL) só
aconteceu
>> esta vez e somente com esta entidade. Será que eu me equivoquei em algo?
>>
>> Desde já agradeço,
>>
>> Rubens José Rodrigues
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> Olá, Rubens. Desculpe a minha ignorância, mas qual a diferença da
> "hora de criação" do registro e "agora" ?
>
> Se o campo possui o valor default current_timestamp, como todos
> sabemos, ao criar um registro o valor da coluna será atribuído com a
> data e hora da criação respeitando o horário do servidor do
> PostgreSQL, desde que o campo não seja incluído em um comando SQL
> INSERT. Aí fica a minha dúvida do que seria o "agora", pois
> "current_timestamp" == "agora" no exato momento da criação do
> registro.
>


Talvez este comportamento seja o descrito no manual [1] (o que faz um
simples apóstrofo!):
" All the date/time data types also accept the special literal value
now to specify the current date and time (again, interpreted as the
transaction start time). Thus, the following three all return the same
result:

SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT TIMESTAMP 'now';  -- incorrect for use with DEFAULT

    Tip: You do not want to use the third form when specifying a
DEFAULT clause while creating a table. The system will convert now to
a timestamp as soon as the constant is parsed, so that when the
default value is needed, the time of the table creation would be used!
The first two forms will not be evaluated until the default value is
used, because they are function calls. Thus they will give the desired
behavior of defaulting to the time of row insertion. "

Osvaldo

[1]
http://www.postgresql.org/docs/current/interactive/functions-datetime.html
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a