Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2015-03-24 10:38 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

 Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
 integer com chaves artificiais? O que acontece e o que fazer?

Não é uma resposta à tua pergunta, mas acabo de pensar que, com chaves
naturais, isso não aconteceria salvo erro de modelagem.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Saraiva
No meu ponto de vista bigint e bigserial são necessários quando, por
exemplo, temos uma chave artificial que pode crescer de forma mais
rápida que o normal.
Além desse caso, quais seriam os outros casos em que eles são uteis?

Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
integer com chaves artificiais? O que acontece e o que fazer?

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Saraiva
Não tinha parado para analisar a capacidade do bigint. Boa observação,
talvez eu não precise fazer nada então pois a média de novos registros é de
100 por dia.

Em 24 de março de 2015 17:08, Matheus de Oliveira matioli.math...@gmail.com
 escreveu:


 2015-03-24 17:05 GMT-03:00 Matheus de Oliveira matioli.math...@gmail.com
 :

 Agora, se considerássemos 1000 linhas por segundo, com integer aguentaria
 apenas 24 dias, já bigint aguentaria 292 bilhões de anos.


 Corrigindo, seria 292 milhões...

 Atenciosamente,
 --
 Matheus de Oliveira
 Analista de Banco de Dados
 Dextra Sistemas - MPS.Br nível F!
 www.dextra.com.br/postgres


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Saraiva
Em Ter, 2015-03-24 às 12:39 -0300, Leandro Guimarães Faria Corcete DUTRA
escreveu:
 Le 24 mars 2015 12:36:45 GMT-03:00, Matheus Saraiva 
 matheus.sara...@gmail.com a écrit :
 Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
 Leandro escreveu:
 
 Correto, mas vale ressaltar que nem todas as tabelas tem algum campo
 que
 possa ser usado como chave natural.
 
 Só por erro de modelagem, nem que seja composta de todos os atributos.


http://oi59.tinypic.com/2zpsg8y.jpg

Qual a chave natural para a tabela Pessoas na imagem? A ideia da
tabela pessoas é armazenar os dados de qualquer pessoa seja física ou
jurídica.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Everton Berz
Tenho um caso que usei bigserial, foi em uma tabela de log das operações
que os usuários realizavam no sistema. Calculamos que levaria alguns anos,
mas poderia acontecer, e quando acontecesse, pouparíamos trabalho dos
futuros dba's.

As colunas da tabela eram:
- id bigserial (chave artificial)
- data/horario
- usuario que realizou a operação
- descrição da operacao realizada

Não consigo encontrar uma chave natural nesse caso
Leandro, teria alguma sugestão? Onde estaria o erro de modelagem nesse caso?

Lembrando que um usuário pode executar a mesma operação no mesmo segundo /
milésimo de segundo, etc.





--
Everton

2015-03-24 12:51 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

 Em Ter, 2015-03-24 às 12:39 -0300, Leandro Guimarães Faria Corcete DUTRA
 escreveu:
  Le 24 mars 2015 12:36:45 GMT-03:00, Matheus Saraiva 
 matheus.sara...@gmail.com a écrit :
  Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
  Leandro escreveu:
  
  Correto, mas vale ressaltar que nem todas as tabelas tem algum campo
  que
  possa ser usado como chave natural.
 
  Só por erro de modelagem, nem que seja composta de todos os atributos.


 http://oi59.tinypic.com/2zpsg8y.jpg

 Qual a chave natural para a tabela Pessoas na imagem? A ideia da
 tabela pessoas é armazenar os dados de qualquer pessoa seja física ou
 jurídica.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Tabela em Lock

2015-03-24 Por tôpico Zan
Versão: PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc 
(Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit


Boa tarde.

Estou tentando fazer a seguinte alteração na estrutura de uma tabela:
ALTER TABLE portal.tb_tarefa
  ADD COLUMN id_usuario INTEGER;

Esta é uma tabela pequena, com 200 registros, mas o comando não executa. 
Já percebi que algumas vezes quando faço um select em uma tabela com 
transação ativa a tabela fica em Lock, não deixa eu fazer alteração na 
estrutura.


Como saber quem está travando a tabela de alguma forma para impedir que 
seja feita qualquer alteração na tabela?


Obrigado.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Leandro Guimarães Faria Corcete DUTRA
Le 24 mars 2015 12:36:45 GMT-03:00, Matheus Saraiva matheus.sara...@gmail.com 
a écrit :
Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
Leandro escreveu:

Correto, mas vale ressaltar que nem todas as tabelas tem algum campo
que
possa ser usado como chave natural.

Só por erro de modelagem, nem que seja composta de todos os atributos.



-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tabela em Lock

2015-03-24 Por tôpico Zan

On 24/03/2015 12:31, Zan wrote:

Versão: PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc
(Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit

Boa tarde.

Estou tentando fazer a seguinte alteração na estrutura de uma tabela:
ALTER TABLE portal.tb_tarefa
   ADD COLUMN id_usuario INTEGER;

Esta é uma tabela pequena, com 200 registros, mas o comando não executa.
Já percebi que algumas vezes quando faço um select em uma tabela com
transação ativa a tabela fica em Lock, não deixa eu fazer alteração na
estrutura.

Como saber quem está travando a tabela de alguma forma para impedir que
seja feita qualquer alteração na tabela?

Obrigado.



Me lembrei agora que este é o horário de backup da base. Pode ser isso?

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Silva
Everton, qual a ação vocês realizariam quando estourar o limite?

-Mensagem Original-
De: Everton Berz everton.b...@gmail.com
Enviada em: ‎24/‎03/‎2015 13:02
Para: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Assunto: Re: [pgbr-geral] bigint e bigserial, quando usar?

Tenho um caso que usei bigserial, foi em uma tabela de log das operações que os 
usuários realizavam no sistema. Calculamos que levaria alguns anos, mas poderia 
acontecer, e quando acontecesse, pouparíamos trabalho dos futuros dba's.



As colunas da tabela eram:

- id bigserial (chave artificial)
- data/horario

- usuario que realizou a operação
- descrição da operacao realizada


Não consigo encontrar uma chave natural nesse caso
Leandro, teria alguma sugestão? Onde estaria o erro de modelagem nesse caso?


Lembrando que um usuário pode executar a mesma operação no mesmo segundo / 
milésimo de segundo, etc.










--
Everton


2015-03-24 12:51 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

Em Ter, 2015-03-24 às 12:39 -0300, Leandro Guimarães Faria Corcete DUTRA
escreveu:
 Le 24 mars 2015 12:36:45 GMT-03:00, Matheus Saraiva 
 matheus.sara...@gmail.com a écrit :
 Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
 Leandro escreveu:
 
 Correto, mas vale ressaltar que nem todas as tabelas tem algum campo
 que
 possa ser usado como chave natural.

 Só por erro de modelagem, nem que seja composta de todos os atributos.


http://oi59.tinypic.com/2zpsg8y.jpg

Qual a chave natural para a tabela Pessoas na imagem? A ideia da
tabela pessoas é armazenar os dados de qualquer pessoa seja física ou
jurídica.


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2015-03-24 13:39 GMT-03:00 Matheus Silva matheus.sara...@gmail.com:
 O email apesar de único não pode ser obrigatório.

Uma imagem nunca dará todas as informações, do tipo ‘por que não
pode?’.  De qualquer maneira, parece um modelo muito ruim esse, mas
aqui não é o lugar para explorar todos os problemas potenciais.

Como eu disse, em último caso uma chave única com todos os atributos
não artificiais.

Mas pense pelo outro lado: se não houver uma chave natural (mesmo que
composta e não a primária), como evitar a duplicação de dados?  Se
houver alguma lógica de programa aplicativo que evita duplicações,
essa lógica deve ser analisada e implementada declarativamente como
uma restrição de integridade, que nada mais é que uma chave natural,
seja composta ou simples, seja primária ou alternativa.


 Pessoalmente eu acho que não se pode generalizar tal coisa, cada caso é um
 caso.

Ciência se faz com generalizações, também chamadas de teorias.  Se
houver alguma exceção relevante, expande-se a teoria para dar conta da
exceção.  Não há espaço na Informática para ‘pessoalmentes’; todos
esses ‘achos’ devem ser analisados, criticados, e ou formalizados na
forma de conceitos, ou rejeitados.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Osvaldo Kussama
Em 24/03/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 No meu ponto de vista bigint e bigserial são necessários quando, por
 exemplo, temos uma chave artificial que pode crescer de forma mais
 rápida que o normal.
 Além desse caso, quais seriam os outros casos em que eles são uteis?

 Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
 integer com chaves artificiais? O que acontece e o que fazer?



Depende de como foi criada a SEQUENCE, particularmente a opção CYCLE / NO CYCLE:


The CYCLE option allows the sequence to wrap around when the
maxvalue or minvalue has been reached by an ascending or descending
sequence respectively. If the limit is reached, the next number
generated will be the minvalue or maxvalue, respectively.

If NO CYCLE is specified, any calls to nextval after the sequence
has reached its maximum value will return an error. If neither CYCLE
or NO CYCLE are specified, NO CYCLE is the default.

http://www.postgresql.org/docs/current/interactive/sql-createsequence.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Silva
O email apesar de único não pode ser obrigatório.
Pessoalmente eu acho que não se pode generalizar tal coisa, cada caso é um caso.
A imagem mostra os campos necessário bem como as chaves unique e campos 
obrigatórios.

-Mensagem Original-
De: Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org
Enviada em: ‎24/‎03/‎2015 13:34
Para: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Assunto: Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 12:51 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

 Qual a chave natural para a tabela Pessoas na imagem?

Imagem nunca tem todas as informações necessárias à modelagem.  Uma
das razões para evitar modelagem por diagramas.


 A ideia da
 tabela pessoas é armazenar os dados de qualquer pessoa seja física ou
 jurídica.

Erro de normalização.

Mas, no caso, já está marcado o endereço de correio eletrônico
(email_pessoas) como chave natural.  O que, presumivelmente,
economizaria alguns octetos e junções se fosse usado como chave
estrangeira em vez de uma chave artificial redundante.

Chave artificial sempre é inerentemente redundante, embora possa
economizar octetos se a chave natural for composta e grande.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2015-03-24 13:55 GMT-03:00 Matheus Silva matheus.sara...@gmail.com:
 Desculpe Brother mas não concordo com você, não vou aqui entrar no mérito
 para não desviar o foco do email. Você pode apresentar as desvantagens da
 minha modelagem e eu posso enumerar as vantagens, bem como as desvantagens
 da sua proposta, convém a que preparou a modelagem pesar os prós e contras
 para o caso.

Claro.  Como eu havia dito, lista de discussões não é o lugar para
debater modelos específicos, só conceitos e suas aplicações.

Mas veja que você não conseguiu analisar a questão da duplicidade que
eu propus, que é a essência do conceito de chave, e de que as ‘chaves’
artificiais não dão conta.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Silva
Desculpe Brother mas não concordo com você, não vou aqui entrar no mérito para 
não desviar o foco do email. Você pode apresentar as desvantagens da minha 
modelagem e eu posso enumerar as vantagens, bem como as desvantagens da sua 
proposta, convém a que preparou a modelagem pesar os prós e contras para o caso.

-Mensagem Original-
De: Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org
Enviada em: ‎24/‎03/‎2015 13:48
Para: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Assunto: Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 13:39 GMT-03:00 Matheus Silva matheus.sara...@gmail.com:
 O email apesar de único não pode ser obrigatório.

Uma imagem nunca dará todas as informações, do tipo ‘por que não
pode?’.  De qualquer maneira, parece um modelo muito ruim esse, mas
aqui não é o lugar para explorar todos os problemas potenciais.

Como eu disse, em último caso uma chave única com todos os atributos
não artificiais.

Mas pense pelo outro lado: se não houver uma chave natural (mesmo que
composta e não a primária), como evitar a duplicação de dados?  Se
houver alguma lógica de programa aplicativo que evita duplicações,
essa lógica deve ser analisada e implementada declarativamente como
uma restrição de integridade, que nada mais é que uma chave natural,
seja composta ou simples, seja primária ou alternativa.


 Pessoalmente eu acho que não se pode generalizar tal coisa, cada caso é um
 caso.

Ciência se faz com generalizações, também chamadas de teorias.  Se
houver alguma exceção relevante, expande-se a teoria para dar conta da
exceção.  Não há espaço na Informática para ‘pessoalmentes’; todos
esses ‘achos’ devem ser analisados, criticados, e ou formalizados na
forma de conceitos, ou rejeitados.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Everton Berz
Nesse caso a ideia era reiniciar a sequence.
Os registros antigos eram movidos para outro repositório (poderia ser uma
tabela ou banco distinto, ou até outra tecnologia de armazenamento). A
aplicação teria que ser ajustada pra trabalhar desta forma.

Um problema é que todas as referências eram movidas também, então nesse
caso foi viável pois tinha somente uma ou duas tabelas dependentes.
Em uma estrutura maior concordo que o problema seria mais complexo e eu não
teria outra sugestão no momento.



--
Everton

2015-03-24 13:29 GMT-03:00 Matheus Silva matheus.sara...@gmail.com:

 Everton, qual a ação vocês realizariam quando estourar o limite?
 --
 De: Everton Berz everton.b...@gmail.com
 Enviada em: 24/03/2015 13:02
 Para: Comunidade PostgreSQL Brasileira
 pgbr-geral@listas.postgresql.org.br
 Assunto: Re: [pgbr-geral] bigint e bigserial, quando usar?

 Tenho um caso que usei bigserial, foi em uma tabela de log das operações
 que os usuários realizavam no sistema. Calculamos que levaria alguns anos,
 mas poderia acontecer, e quando acontecesse, pouparíamos trabalho dos
 futuros dba's.

 As colunas da tabela eram:
 - id bigserial (chave artificial)
 - data/horario
 - usuario que realizou a operação
 - descrição da operacao realizada

 Não consigo encontrar uma chave natural nesse caso
 Leandro, teria alguma sugestão? Onde estaria o erro de modelagem nesse
 caso?

 Lembrando que um usuário pode executar a mesma operação no mesmo segundo /
 milésimo de segundo, etc.





 --
 Everton

 2015-03-24 12:51 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

 Em Ter, 2015-03-24 às 12:39 -0300, Leandro Guimarães Faria Corcete DUTRA
 escreveu:
  Le 24 mars 2015 12:36:45 GMT-03:00, Matheus Saraiva 
 matheus.sara...@gmail.com a écrit :
  Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
  Leandro escreveu:
  
  Correto, mas vale ressaltar que nem todas as tabelas tem algum campo
  que
  possa ser usado como chave natural.
 
  Só por erro de modelagem, nem que seja composta de todos os atributos.


 http://oi59.tinypic.com/2zpsg8y.jpg

 Qual a chave natural para a tabela Pessoas na imagem? A ideia da
 tabela pessoas é armazenar os dados de qualquer pessoa seja física ou
 jurídica.

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus Saraiva
Em Ter, 2015-03-24 às 11:13 -0300, Guimarães Faria Corcete DUTRA,
Leandro escreveu:
 2015-03-24 10:38 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:
 
  Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
  integer com chaves artificiais? O que acontece e o que fazer?
 
 Não é uma resposta à tua pergunta, mas acabo de pensar que, com chaves
 naturais, isso não aconteceria salvo erro de modelagem.

Correto, mas vale ressaltar que nem todas as tabelas tem algum campo que
possa ser usado como chave natural.

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tabela em Lock

2015-03-24 Por tôpico Matheus de Oliveira
2015-03-24 12:31 GMT-03:00 Zan zan...@farmaponte.com.br:

 ALTER TABLE portal.tb_tarefa
   ADD COLUMN id_usuario INTEGER;

 Esta é uma tabela pequena, com 200 registros, mas o comando não executa.
 Já percebi que algumas vezes quando faço um select em uma tabela com
 transação ativa a tabela fica em Lock, não deixa eu fazer alteração na
 estrutura.

 Como saber quem está travando a tabela de alguma forma para impedir que
 seja feita qualquer alteração na tabela?


Um ALTER TABLE para adicionar coluna requer um bloqueio exclusivo
(AccessExclusiveLock) na tabela, que é o mais restritivo. Isso significa
que qualquer transação, mesmo que somente com um SELECT, esteja usando a
tabela, o ALTER TABLE ficará bloqueado, e consequentemente, quando este
pegar o bloqueio, as demais transações que ficarão bloqueadas.

Veja que apesar disso, essa é uma operação quase instância (apenas algumas
atualizações de catálogo), e não há rescrita da tabela, então o tamanho
desta não importa.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tabela em Lock

2015-03-24 Por tôpico Matheus de Oliveira
2015-03-24 12:34 GMT-03:00 Zan zan...@farmaponte.com.br:

 Me lembrei agora que este é o horário de backup da base. Pode ser isso?


Se for um backup pg_dump, com certeza. O pg_dump requer bloqueio usando um
AccessShareLock, o que conflita com o AccessExclusiveLock (na verdade
qualquer um conflita com esse último), requerido pelo seu ALTER TABLE.

Já com um backup físico esse problema não aconteceria.

Esqueci de comentar na outra mensagem, mas você pode usar as consultas [1]
e [2] para verificar com mais detalhes o que está acontecendo.

[1] https://wiki.postgresql.org/wiki/Lock_dependency_information
[2] https://wiki.postgresql.org/wiki/Lock_Monitoring

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus de Oliveira
2015-03-24 10:38 GMT-03:00 Matheus Saraiva matheus.sara...@gmail.com:

 No meu ponto de vista bigint e bigserial são necessários quando, por
 exemplo, temos uma chave artificial que pode crescer de forma mais
 rápida que o normal.
 Além desse caso, quais seriam os outros casos em que eles são uteis?


Crescer de forma rápida tem dois pontos:

* O primeiro é, os registros antigos serão apagados de alguma forma? Se
forem, você pode usar a opção CYCLE ao criar sua SEQUENCE, assim sendo
quando atingir o limite de 2147483647 (2^31 - 1), o valor voltaria à 1.

* O segundo é quando realmente vários registros irão permanecer, ou não
consegue-se controlar os ids que ficarão. Nesse caso não tem jeito, se
você espera mais que 2^31 registros, então deves usar bigint/bigserial.

Em geral, bigint e int oferecem performance bem similares, apesar de bigint
ser o dobro do tamanho, veja alguns testes bem bacanas feitos pelo Depesz
em [1] (int = int4 e bigint = int8).

Agora, vamos à uma análise mais prática, assumindo o segundo caso, vamos
pensar num modelo onde são inseridos 10 linhas por segundo, com integer
iria exaurir em aprox. 6 anos e 10 meses, já com bigint em 29 bilhões de
anos. Agora, se considerássemos 1000 linhas por segundo, com integer
aguentaria apenas 24 dias, já bigint aguentaria 292 bilhões de anos. Por
curiosidade, 1 linhas/segundo seria int=2 dias e bigint=29 milhões de
anos.

Essas contas de exemplo são só pra mostrar a magnitude que um bigint pode
chegar. Daí vem a dúvida, será que compensa usar int em casos de dúvida
só para economizar 4bytes por linha (que nem sempre são de fato
economizados devido à alinhamento)? Por outro lado, será que vale a pena
usar um UUID pensando que bigint *não vai aguentar* (vejam acima, milhões
de anos)?

Bem, se alguém quiser conferir testar, as contas que usei nas informações
acima foram (se alguém achar um erro, avisa aí):

= SELECT txsec, justify_interval(((2^31) / txsec) * interval '1 sec') AS
int_usage, ((2^63) / txsec) / 31536000 AS bigint_usage FROM
(VALUES(10),(1000),(1),(10)) t(txsec);
 txsec  | int_usage  |   bigint_usage
++--
 10 | 6 years 10 mons 25 days 12:19:24.8 | 29247120867.7536
   1000 | 24 days 20:31:23.648   | 292471208.677536
  1 | 2 days 11:39:08.3648   | 29247120.8677536
 10 | 05:57:54.83648 | 2924712.08677536
(4 rows)



 Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
 integer com chaves artificiais? O que acontece e o que fazer?


Basta alterar o tipo:

ALTER TABLE tablename ALTER columname TYPE bigint;

O problema é que essa é uma operação custosa, pois é necessário reescrever
a tabela toda (apesar de ser possível fazer em lotes/batches), além disso é
necessário refazer as visões e funções para casar os tipos, caso tenham
dependências.

[1] http://www.depesz.com/2014/12/06/how-much-slower-are-numerics/

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Matheus de Oliveira
2015-03-24 17:05 GMT-03:00 Matheus de Oliveira matioli.math...@gmail.com:

 Agora, se considerássemos 1000 linhas por segundo, com integer aguentaria
 apenas 24 dias, já bigint aguentaria 292 bilhões de anos.


Corrigindo, seria 292 milhões...

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral