Estou voltando a trabalhar com o PostgreSQL, depois de mais de 5 anos sem utilizar.
Neste momento estou "intrigado" com o comportamento do PostgreSQL, relacionado a um campo "orgao", que tem valores "numéricos" alinhados à direita.
Vejam a estrutura da tabela abaixo:
bash-3.2$ psql -d pmgvprod
psql (9.0.4)
Type "help" for help.
pmgvprod=# \d orgaos
Table "pmgvschema.orgaos"
Column | Type | Modifiers
-------------+-----------------------+-----------
orgao | character varying(4) | not null
descricao | character varying(30) |
sigla | character varying(12) |
tipoorgao | character varying(2) |
nivel | character varying(1) |
responsavel | character varying(35) |
cargo | character varying(2) |
Indexes:
"pk_orgaos_orgao_01" PRIMARY KEY, btree (orgao)
Como disse, o campo "orgao" tem somente valores "numéricos" alinhados à direita, por exemplo, o valor 650 está armazenado como " 650" (branco, seis, cinco, zero):
"orgao","descricao","datacad"
" 100","Orgao 100",20110101
" 200","Orgao 200",20110102
" 300","Orgao 300",20110103
" 555","Orgao 555",20110104
" 650","Orgao 650",20110105
" 700","Orgao 700",20110106
"1000","Orgao 1000",20110107
"2000","Orgao 2000",20110108
"3000","Orgao 3000",20110109
"4000","Orgao 4000",20110110
O problema aqui é quando é feito um "SELECT" buscando todas as chaves maiores que " 650" (branco, seis, cinco, zero):
SELECT ORGAO FROM ORGAOS WHERE ORGAO > " 650";
O PostgreSQL não está retornando os valores que deveria.
Não vejo problemas em trabalhar com este campo como "numérico", mas fiquei intrigado o "porquê" do PostgreSQL ter este comportamento diferente dos outros bancos de dados testados.
O banco está com o Encoding, Collation e Ctype conforme abaixo:
Pergunta
amacedo
Estou voltando a trabalhar com o PostgreSQL, depois de mais de 5 anos sem utilizar.
Neste momento estou "intrigado" com o comportamento do PostgreSQL, relacionado a um campo "orgao", que tem valores "numéricos" alinhados à direita.
Vejam a estrutura da tabela abaixo:
bash-3.2$ psql -d pmgvprod
psql (9.0.4)
Type "help" for help.
pmgvprod=# \d orgaos
Table "pmgvschema.orgaos"
Column | Type | Modifiers
-------------+-----------------------+-----------
orgao | character varying(4) | not null
descricao | character varying(30) |
sigla | character varying(12) |
tipoorgao | character varying(2) |
nivel | character varying(1) |
responsavel | character varying(35) |
cargo | character varying(2) |
Indexes:
"pk_orgaos_orgao_01" PRIMARY KEY, btree (orgao)
Como disse, o campo "orgao" tem somente valores "numéricos" alinhados à direita, por exemplo, o valor 650 está armazenado como " 650" (branco, seis, cinco, zero):
"orgao","descricao","datacad"
" 100","Orgao 100",20110101
" 200","Orgao 200",20110102
" 300","Orgao 300",20110103
" 555","Orgao 555",20110104
" 650","Orgao 650",20110105
" 700","Orgao 700",20110106
"1000","Orgao 1000",20110107
"2000","Orgao 2000",20110108
"3000","Orgao 3000",20110109
"4000","Orgao 4000",20110110
O problema aqui é quando é feito um "SELECT" buscando todas as chaves maiores que " 650" (branco, seis, cinco, zero):
SELECT ORGAO FROM ORGAOS WHERE ORGAO > " 650";
O PostgreSQL não está retornando os valores que deveria.
Não vejo problemas em trabalhar com este campo como "numérico", mas fiquei intrigado o "porquê" do PostgreSQL ter este comportamento diferente dos outros bancos de dados testados.
O banco está com o Encoding, Collation e Ctype conforme abaixo:
postgres=# \q
-bash-3.2$ psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Acces
s privileges
-----------+----------+----------+------------------+------------------+-----------------------
pmgvprod | postgres | LATIN1 | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
postgres | postgres | LATIN1 | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
template0 | postgres | LATIN1 | en_US.ISO-8859-1 | en_US.ISO-8859-1 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US.ISO-8859-1 | en_US.ISO-8859-1 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
Alguém já passou por isso?
Alexandre
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.