O seguinte é em relação ao PostgreSQL 9.1:
Estou usando as funções de string right () e left () para corrigir algumas instâncias em que os dados foram inseridos em meu banco de dados sendo "desligados por um" right(field1,1)||left(field2,-1
. . No processo, encontrei um resultado inesperado em uma coluna char(2).
Se eu fizer isso me dá o retorno SELECT RIGHT('A ',1)
esperado .' '
No entanto, se eu fizer SELECT RIGHT('A '::CHAR(2),1)
isso, me dá 'A'
.
Por que está fazendo isso? É um bug? Eu tentei SELECT RIGHT('A '::CHAR(3),1)
e também dá 'A'
como resultado.
O
CHAR
tipo de dados é horrível. Evite-o se possível, suas regras de preenchimento são insanas. O PostgreSQL não o suportaria de forma alguma se o padrão não exigisse suporte para ele.Não está claro se esse é um comportamento intencional ou um bug. Normalmente, os espaços em branco iniciais são removidos
CHAR
antes do processamento e suspeito que, paraRIGHT
, Pg esteja removendo os espaços em branco da direita, como se fosse um texto RTL.Sugiro levantar isso para discussão no pgsql-general. Se nada mais, justifica claramente uma nota de documentação.