Re: [pgbr-geral] Sub-Select

2009-07-30 Por tôpico Vinicius A. Santos
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-07-30 Por tôpico Fabrízio de Royes Mello
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

2009-07-30 Por tôpico Vinicius A. Santos

 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

2009-07-30 Por tôpico Tiago Adami
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

2009-07-30 Por tôpico Euler Taveira de Oliveira
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

2009-07-30 Por tôpico Vinicius A. Santos

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

2009-07-30 Por tôpico Vinicius A. Santos
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

2009-07-30 Por tôpico Euler Taveira de Oliveira
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

2009-07-29 Por tôpico Euler Taveira de Oliveira
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