Re: [pgbr-geral] Sub-Select
Euler Taveira de Oliveira escreveu: Não entendi... O que tem o tipo? Qual o driver está retornando isso? Não me lembro disso ter sido alterado da 8.3 para 8.4. A informação de tamanho do tipo fica no catálogo (indiretamente -- format_type()). Eu tenho o seguinte select: SELECT (select usuario from usuarios where chave=(select autorizadopor from pedidocompra where pedido=e.pedidocompra)) as quemautorizoucompra FROM entradas e WHERE e.tipoentrada='0' and e.dataoperacao = current_date - 3 Executando esta consulta na 8.4, o campo QuemAutorizouCompra, retorna varchar(20), que é o tipo do campo usuario da tabela de usuários, porém a mesma consulta executando na 8.3, me retorna apenas varchar, sem a limitação de 20. Estou observando isto pelo pgAdmin, não sei se é possível fazer o psql mostrar o tipo da coluna como faz o pgAdmin, se for possível eu posto o resultado, queria apenas entender o que está acontecendo. -- Vinicius A. Santos www.msisolucoes.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
2009/7/30 Vinicius A. Santos vinic...@msisolucoes.com.br SELECT (select usuario from usuarios where chave=(select autorizadopor from pedidocompra where pedido=e.pedidocompra)) as quemautorizoucompra FROM entradas e WHERE e.tipoentrada='0' and e.dataoperacao = current_date - 3 Executando esta consulta na 8.4, o campo QuemAutorizouCompra, retorna varchar(20), que é o tipo do campo usuario da tabela de usuários, porém a mesma consulta executando na 8.3, me retorna apenas varchar, sem a limitação de 20. corte Caro Vinicius, Observe os testes abaixo no 8.2, 8.3 e 8.4: postgresql-8.2 postg...@bdteste=# create table foo(codigo integer, nome varchar(40)); CREATE TABLE postg...@bdteste=# postg...@bdteste=# \d foo Table public.foo Column | Type | Modifiers +---+--- codigo | integer | nome | character varying(40) | postg...@bdteste=# postg...@bdteste=# create temp table w_foo as bdteste-# select (select nome from foo where codigo = 1) as nome1, bdteste-# (select nome from foo where codigo = 2) as nome2; SELECT postg...@bdteste=# postg...@bdteste=# \d w_foo Table pg_temp_1.w_foo Column | Type| Modifiers +---+--- nome1 | character varying | nome2 | character varying | postg...@bdteste=# postg...@bdteste=# select version(); version -- PostgreSQL 8.2.13 on i686-pc-linux-gnu, compiled by GCC cc (Ubuntu 4.3.3-5ubuntu4) 4.3.3 (1 row) /postgresql-8.2 postgresql-8.3 postg...@bdteste=# create table foo(codigo integer, nome varchar(40)); CREATE TABLE postg...@bdteste=# postg...@bdteste=# \d foo Tabela public.foo Coluna | Tipo | Modificadores +---+--- codigo | integer | nome | character varying(40) | postg...@bdteste=# postg...@bdteste=# create temp table w_foo as bdteste-# select (select nome from foo where codigo = 1) as nome1, bdteste-# (select nome from foo where codigo = 2) as nome2; SELECT postg...@bdteste=# postg...@bdteste=# \d w_foo Tabela pg_temp_1.w_foo Coluna | Tipo | Modificadores +---+--- nome1 | character varying(40) | nome2 | character varying(40) | postg...@bdteste=# postg...@bdteste=# select version(); version --- PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Ubuntu 4.3.3-5ubuntu4) 4.3.3 (1 registro) /postgresql-8.3 postgresql-8.4 bdteste=# create table foo(codigo integer, nome varchar(40)); CREATE TABLE bdteste=# bdteste=# \d foo Table public.foo Column | Type | Modifiers +---+--- codigo | integer | nome | character varying(40) | bdteste=# bdteste=# create temp table w_foo as bdteste-# select (select nome from foo where codigo = 1) as nome1, bdteste-# (select nome from foo where codigo = 2) as nome2; SELECT bdteste=# bdteste=# \d w_foo Table pg_temp_1.w_foo Column | Type | Modifiers +---+--- nome1 | character varying(40) | nome2 | character varying(40) | bdteste=# bdteste=# select version(); version -- PostgreSQL 8.4.0 on i686-pc-linux-gnu, compiled by GCC gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3, 32-bit (1 row) /postgresql-8.4 Pela demonstração acima pode-se notar que no 8.2 a tabela temporária ficou com o varchar sem especificacao do tamanho e no 8.3 e 8.4 ficou certinho. -- Fabrízio de Royes Mello Blog sobre PostgreSQL: http://fabriziomello.blogspot.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Pela demonstração acima pode-se notar que no 8.2 a tabela temporária ficou com o varchar sem especificacao do tamanho e no 8.3 e 8.4 ficou certinho. Estranho, eu realizei o teste agora, apenas com a 8.3. Eu fiz uma visão com o select que eu postei, então fiz o teste no psql com \d nesta visão. O psql retornou o tipo character varying(20). Porém o pgAdmin e a aplicação(em Delphi), o reconhecem como character varying, na mesma base 8.3. Já resolvemos o problema com o cast, mas queria entender o que houve. -- View this message in context: http://www.nabble.com/Sub-Select-tp24724124p24742292.html Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Olá, Vinícius. O seu subselect contém a clásula UNION? Fiz um teste aqui com um banco de dados interno no 8.3: SELECT chamado.titulo FROM chamado UNION SELECT ''; E o resultado no pgAdmin 3 foi character varying. Se eu remover o conteúdo do union e trazer somente os registros da tabela: SELECT chamado.titulo FROM chamado; Aparece character varying (1000). Não será este o seu problema? -- Tiago J. Adami 2009/7/30 Vinicius A. Santos vinic...@msisolucoes.com.br Pela demonstração acima pode-se notar que no 8.2 a tabela temporária ficou com o varchar sem especificacao do tamanho e no 8.3 e 8.4 ficou certinho. Estranho, eu realizei o teste agora, apenas com a 8.3. Eu fiz uma visão com o select que eu postei, então fiz o teste no psql com \d nesta visão. O psql retornou o tipo character varying(20). Porém o pgAdmin e a aplicação(em Delphi), o reconhecem como character varying, na mesma base 8.3. Já resolvemos o problema com o cast, mas queria entender o que houve. -- View this message in context: http://www.nabble.com/Sub-Select-tp24724124p24742292.html Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. ___ 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] Sub-Select
Vinicius A. Santos escreveu: Pela demonstração acima pode-se notar que no 8.2 a tabela temporária ficou com o varchar sem especificacao do tamanho e no 8.3 e 8.4 ficou certinho. Estranho, eu realizei o teste agora, apenas com a 8.3. Eu fiz uma visão com o select que eu postei, então fiz o teste no psql com \d nesta visão. O psql retornou o tipo character varying(20). Porém o pgAdmin e a aplicação(em Delphi), o reconhecem como character varying, na mesma base 8.3. Já resolvemos o problema com o cast, mas queria entender o que houve. Eu não entendi porque o tipo importa mas isso é um problema da aplicação (seja ela o PGAdmin ou Delphi) pois o PostgreSQL é capaz de retornar o tipo com o respectivo tamanho (se for o caso). Veja: template1=# select version(); version --- PostgreSQL 8.0.21 on i686-pc-linux-gnu, compiled by GCC i686-pc-linux-gnu-gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.1) (1 registro) template1=# create table foo (a integer, b varchar(30), c char(10), template1(# d numeric(5,2)); CREATE TABLE template1=# \! cat /tmp/x SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod) FROM pg_catalog.pg_attribute a WHERE a.attrelid = 'foo'::regclass AND a.attnum 0 AND NOT a.attisdropped ORDER BY a.attnum template1=# \i /tmp/x attname | format_type -+--- a | integer b | character varying(30) c | character(10) d | numeric(5,2) (4 registros) -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Aparece character varying (1000). Não será este o seu problema? Não, o meu select não tem UNION, segue o select: SELECT (select usuario from usuarios where chave=(select autorizadopor from pedidocompra where pedido=e.pedidocompra)) as quemautorizoucompra FROM entradas e WHERE e.tipoentrada='0' and e.dataoperacao = current_date - 3 -- View this message in context: http://www.nabble.com/Sub-Select-tp24724124p24742835.html Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Euler Taveira de Oliveira escreveu: Eu não entendi porque o tipo importa mas isso é um problema da aplicação (seja ela o PGAdmin ou Delphi) pois o PostgreSQL é capaz de retornar o tipo com o respectivo tamanho (se for o caso). Veja: Na verdade não importa muito(a não ser pelo trabalho de fazer o cast, e fazer as adequações no Delphi). Eu usei o psql diretamente no servidor(Fedora), para fazer a consulta. Porém se eu conectar pelo meu terminal WinXP, através do pgAdmin, acontece isso, não sei se pode ser a libpq(ou outra DLL), o fato de os 2 aplicativos não conseguirem retornar corretamente. -- Vinicius A. Santos www.msisolucoes.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Vinicius A. Santos escreveu: Euler Taveira de Oliveira escreveu: Eu não entendi porque o tipo importa mas isso é um problema da aplicação (seja ela o PGAdmin ou Delphi) pois o PostgreSQL é capaz de retornar o tipo com o respectivo tamanho (se for o caso). Veja: Na verdade não importa muito(a não ser pelo trabalho de fazer o cast, e fazer as adequações no Delphi). 'Cast' para que? (Desculpe, eu não entendi ainda...) Eu usei o psql diretamente no servidor(Fedora), para fazer a consulta. Porém se eu conectar pelo meu terminal WinXP, através do pgAdmin, acontece isso, não sei se pode ser a libpq(ou outra DLL), o fato de os 2 aplicativos não conseguirem retornar corretamente. Como eu disse acima, o problema é da aplicação (PGAdmin ou driver utilizado no Delphi); a libpq *não* tem nada a ver com isso. -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Sub-Select
Vinicius A. Santos escreveu: tenho um sub-select, que traz um campo de outra tabela do tipo varchar(20). No 8.3 ele retorna o tipo varchar, sem especificar o tamanho, porém no 8.4, ele me retorna varchar(20), como o tipo do campo trazido no sub-select. Isto era um bug do 8.3 ??? vou precisar adequar a aplicação, com cast's explícitos se for o caso. Não entendi... O que tem o tipo? Qual o driver está retornando isso? Não me lembro disso ter sido alterado da 8.3 para 8.4. A informação de tamanho do tipo fica no catálogo (indiretamente -- format_type()). -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral