Postgresql usar sequences bom dia galera, estou re-escrevendo um sistema para o Adianti e agora encontrei um problema, tenho algumas tabelas que usam sequences para gerar o id, no Adianti não estou conseguindo usar elas, não sei como seria dentro do model....
DD
Postgresql usar sequences  
bom dia galera, estou re-escrevendo um sistema para o Adianti e agora encontrei um problema, tenho algumas tabelas que usam sequences para gerar o id, no Adianti não estou conseguindo usar elas, não sei como seria dentro do model.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


NR

Basta alterar nos models a constante IDPOLICY para serial:
 
  1. <?php
  2. const IDPOLICY = 'serial';
  3. ?>
DD

Nataniel, bom dia,
já estou usando serial no model,

só que a tabela ao ser criada com o id type serial (na verdade serial é um alias para uma sequencia onde o está relacionada ao campo id) funciona certinho, ele adiciona a sequencia.
mas, se quando eu criei a tabela eu não defini como serial e sim usando outra sequencia não atrelada ao campo.
ex: id integer NOT NULL DEFAULT nextval(('seq_id'::text)::regclass),

e por dentro do framework eu não consigo dar o comando
SELECT last_value FROM seq_id

diz que a tabela seq_id não foi definida no model

quando eu dou um insert já com o id (que eu peguei o último e somei um) ele grava na tabela corretamente mas não atualiza a sequencia, o problema ocorre quando em outra rotina que usa a sequencia vai dar duplicate key

acho que a minha única solução é criar as tabelas novamente usando o type como serial e importar os dados.
NR

Pode ter relação com o nome das sequences. Por padrão o nome considerado pelo Adianti é "nometabela_chaveprimaria_seq". Por exemplo, para a tabela cliente e chave primária id teríamos: 'cliente_id_seq'.

Se estiver usando outro padrão, declare a constante SEQUENCE nos seus models com o nome correto:
 
  1. <?php
  2. class Cliente extends TRecord
  3. {
  4. const TABLENAME = 'cliente';
  5. const PRIMARYKEY= 'id';
  6. const IDPOLICY = 'serial'; // {max, serial}
  7. const SEQUENCE = 'nome_sua_sequencia';
  8. ...
  9. ?>