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
