Em 13 de agosto de 2011 11:53, Alexandre Macedo <[email protected]> escreveu: > Senhores, > > 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? >
Se seu comando for literalmente o apresentado acima você especificou erroneamente a string. Uma string é delimitada por ' e não por ". Se você colocar " 650" você está se referindo a um identificador e não a string ' 650'. Veja "delimited identifier" ou "quoted identifier" em: http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS Coloque aqui o resultado obtido e o que você esperava obter. Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
