On Tue, Apr 2, 2013 at 10:36 AM, Alexsander Rosa <[email protected]>wrote:
> > Entendo que a diferença seria apenas de espaço em disco mesmo. Use > varchar e boa. > > Strings de até 126 bytes têm 1 byte de overhead (para o tamanho da > String); strings maiores têm 4 bytes de overhead. > Não seria um ganho de velocidade se o PostgreSQL armazenasse strings de 2, > 4 e 8 bytes em tipos unsigned? > Sei que existe o tipo "char" (com aspas) que fica armazenado em exatamente > 1 byte. > Hmm... não é assim que funciona. Todos os tipos de tamanho variável (inclua aí o char e deixe o toast fora disso – já explico) compartilham uma mesma estrutura chamada varlena. Este é o cabeçalho padrão para bytea, bpchar (vulgo char), cstrings, &ca e possui a seguinte definição: estrutura Varlena v_len[4] -- informações sobre o tamanho do dado armazenado; v_dat[1] -- Início do array de armazenamento; Este tipo de estrutura é muito utilizado como um /pattern/ e basicamente possibilita a extensibilidade de tipos, funcionalidade que seria inviável com tipos unsigned – se não me engano v_len já foi inteiro num belo dia. Tentei fazer o diff com tags antigos no git mas me perdi :-\ Quando vc cria um tipo de dados com restrição de comprimento, vc habilita no catálogo o armazenamento com atttypmod ( > 0 – ver pg_attribute.atttypmod). Este mesmo atributo é utilizado para operações de validações com a constante VLHDRSIZE (depois confirmo este nome) que é o tamanho do header da estrutura varlena. Esta arquitetura é histórica e existe desde dos primórdios do elefante e a mudança certamente exigiria uma refatoração inclusive conceitual da coisa toda. O "char" com aspas pra mim é novidade.... Abraço! -Leo -- Leonardo Cezar http://www.postgreslogia <http://postgreslogia.wordpress.com>.com
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
