Em 21 de setembro de 2015 10:00, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

> Galera,
>>
>
> Bom dia, coloque sempre um assunto em suas mensagens, por favor.
>
> Estou tendo um problema com uma sequence criada automaticamente no banco
>> de dados utilizando o tipo de campo SERIAL. Ao tentar usar a sequence,
>> recebo a seguinte mensagem:
>>
>> sql> select currval('revisions_id_seq')
>> [2015-09-21 09:53:10] [55000] ERROR: currval of sequence
>> "revisions_id_seq" is not yet defined in this session
>>
>
> Você precisa sempre gerar um valor para sua sequência antes de chamar a
> função curval.
> No seu caso, acho que você precisa fazer um
> SELECT nextval('revisions_id_seq');
> e depois você pode chamar curval quantas vezes precisar.
>
> Alguma idéia? Pesquisei um montão de lugares, e só aparece página de PHP
>> fazendo Go Horse na solução. Nada efetivo para que na hora de criar a
>> sequence no cliente eu não tenha o mesmo erro.
>>
>
> Não sei o que é "Go Horse". Mas a solução taí em cima.
>
> Preciso uma solução que fique dentro da DDL para não ter problemas.
>>
>
> Nada muda na sua DDL, só suas DML e DQL.
>
>
> ​Talvez o que o colega esteja querendo é obter o valor da sequence após um
insert, sendo isso, acrescente no final do comando insert a instrução
"RETURNING campo_​da_sequence"

Supondo que o campo que receberá a sequence chama-se idcodigo, o comando
ficaria assim: INSERT tabela (campos) VALUES (valores) RETURNING​ idcodigo;

Lembrando que o campo, no meu exemplo idcodigo, não precisa estar presente
no comando insert, ou seja, não precisa conter na instrução, apenas no
returning.

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

Responder a