Pessoal,

Só para finalizar o assunto... fiz alguns testes e consegui simular a
situação que descrevi e que os amigos contribuiram...


1) Criando a sequence e verificando as informações:


postg...@bdteste=# CREATE SEQUENCE teste_seq;
CREATE SEQUENCE
postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
       1
(1 row)

postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |          1 |            1 | 9223372036854775807 |
    1 |           1 |       0 | f         | t
(1 row)

postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
       2
(1 row)

postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |          2 |            1 | 9223372036854775807 |
    1 |           1 |      32 | f         | t
(1 row)

postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
       3
(1 row)

postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |          3 |            1 | 9223372036854775807 |
    1 |           1 |      31 | f         | t
(1 row)


* Notem acima o valor da coluna "log_cnt" que o PostgreSQL realiza um
cache de 32 para minimizar as escritas no wal... conforme consta em
src/backend/command/sequence.c



2) Neste ponto iniciamos uma transacao e executamos o nextval


postg...@bdteste=# BEGIN;
BEGIN
postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
       4
(1 row)

postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |          4 |            1 | 9223372036854775807 |
    1 |           1 |      32 | f         | t
(1 row)

postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
       5
(1 row)

postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |          5 |            1 | 9223372036854775807 |
    1 |           1 |      31 | f         | t
(1 row)



3) Nesta etapa "simulamos" um "crash" no servidor... neste neste que
realizei no meu note eu simplesmente desliguei o mesmo direto no power
para simular, por exemplo, uma queda de energia.



postg...@bdteste=# SELECT * FROM teste_seq;
 sequence_name | last_value | increment_by |      max_value      |
min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 teste_seq     |         36 |            1 | 9223372036854775807 |
    1 |           1 |       0 | f         | t
(1 row)

postg...@bdteste=# SELECT nextval('teste_seq');
 nextval
---------
      37
(1 row)


* Verificando o que aconteceu notamos que o proximo valor disponivel é
o último valor acrescentado 32, ou seja, 5 + 32 = 37.


Com isso podemos acompanhar o comportamento do PostgreSQL em relação a
manipulação das sequences.

Agradeço as dicas dos colegas... um grande abraço.


--
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a