Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Osvaldo Kussama
Em 18/04/2018, Rogério Martins escreveu:
> Bom dia pessoal !
>
> É possível criar no PG 9.6 um campo calculado ?
> Exemplo:
>
> select
> t.data_nascimento,
> t.campo_calculado_idade,
> from tabela t
>
> onde:
> t.campo_calculado_idade = date_part('year', age(t.data_nascimento) )
>
> Não quero usar view,  preciso desse campo na tabela.
>


Lembre-se de que incluir um campo calculado a partir de outro(s)
campo(s) de sua tabela vai contra as regras de normalização que são
fundamentais para um bom projeto de banco de dados.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] RES: RES: converter ascii para utf8

2017-09-27 Por tôpico Osvaldo Kussama
Em 27/09/2017, Santiago - NSR escreveu:
> Bom dia. o banco está em ASCII. Necessito passar para UTF8. Quando uso a
> opção -E UTF8 (do pg_dump) da erro...(ao contrario do que escribi).
> Fiz uma função usando o "translate", estou migrando tabela a tabela e está
> dando certo...
>
> resSTR_   =
> translate($1, 
> 'áàâãäåaaaÁÂÃÄÅAAAÀéèêëeEEEÉEEÈìíîïìiiiÌÍÎÏÌIIIóôõöoooòÒÓÔÕÖOOOùúûüÙÚÛÜçÇñÑýÝ',
>
>   
> 'aAeEEEcCnNyY'
>   );
>


Dê uma olhada na unaccent e use-a se julgar mais conveniente:
https://www.postgresql.org/docs/current/static/unaccent.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] RES: converter ascii para utf8

2017-09-26 Por tôpico Osvaldo Kussama
Em 26/09/2017, Santiago - NSR<t...@nsr.com.br> escreveu:
> Sim..quanto a sua consideração estou totalmente de acordo..tanto que minhas
> bases estão todas em utf8. Acontece que necessito enviar essa informação
> para um serviço de terceiros..acredito que era alimentado por um único
> aplicativo.
>

Se suas bases já estão em UTF-8 então não entendi qual é o problema.
Você quer transformar todos os caracteres fora da tabela ASCII padrão
(0 a 127, que é o mesmo em UTF-8) em caracteres deste padrão de
codificação?


> -Mensagem original-
> De: pgbr-geral [mailto:pgbr-geral-boun...@listas.postgresql.org.br] Em nome
> de Osvaldo Kussama
> Enviada em: terça-feira, 26 de setembro de 2017 19:05
> Para: Comunidade PostgreSQL Brasileira
> Assunto: Re: [pgbr-geral] converter ascii para utf8
>
> Em 26/09/2017, Santiago - NSR<t...@nsr.com.br> escreveu:
>> Boa noite. Tenho que converter um banco de dados que está codificado em
>> ASCII para UTF8. Existe alguma ferramenta que possa tratar o arquivo
>> gerado
>> a partir do pg_dump ?.
>>
>> Tentei  gerar o aqruivo pg_dump com –E UTF8 mas não da erro e não deixa
>> gerar o arquivo.
>>

Não entendi a afirmação acima. Se não dá erro qual é o problema?
Talvez você queira dizer que está dando erro.


>>
>>
>
>
> Se por ASCII você quer dizer que está utilizando o conjunto de
> caracteres SQL_ASCII então você fez uma péssima escolha. Isto
> significa que não foi feita nenhuma verificação de validade dos
> caracteres inseridos.
>
> https://www.postgresql.org/docs/current/static/multibyte.html
> "When the server character set is SQL_ASCII, the server interprets
> byte values 0-127 according to the ASCII standard, while byte values
> 128-255 are taken as uninterpreted characters."
>
> Ou seja você terá que verificar qual codificação cada aplicação que
> inseriu dados em seu banco de dados utilizou para tentar descobrir os
> caracteres equivalentes em UTF-8. Se for uma única aplicação talvez
> seja mais fácil, se forem múltiplas aplicações com diferentes
> codificações será, no mínimo, bastante difícil.
>
> Osvaldo
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] converter ascii para utf8

2017-09-26 Por tôpico Osvaldo Kussama
Em 26/09/2017, Santiago - NSR escreveu:
> Boa noite. Tenho que converter um banco de dados que está codificado em
> ASCII para UTF8. Existe alguma ferramenta que possa tratar o arquivo gerado
> a partir do pg_dump ?.
>
> Tentei  gerar o aqruivo pg_dump com –E UTF8 mas não da erro e não deixa
> gerar o arquivo.
>
>
>


Se por ASCII você quer dizer que está utilizando o conjunto de
caracteres SQL_ASCII então você fez uma péssima escolha. Isto
significa que não foi feita nenhuma verificação de validade dos
caracteres inseridos.

https://www.postgresql.org/docs/current/static/multibyte.html
"When the server character set is SQL_ASCII, the server interprets
byte values 0-127 according to the ASCII standard, while byte values
128-255 are taken as uninterpreted characters."

Ou seja você terá que verificar qual codificação cada aplicação que
inseriu dados em seu banco de dados utilizou para tentar descobrir os
caracteres equivalentes em UTF-8. Se for uma única aplicação talvez
seja mais fácil, se forem múltiplas aplicações com diferentes
codificações será, no mínimo, bastante difícil.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Consultas com AND entre relação N x N

2017-07-14 Por tôpico Osvaldo Kussama
Em 14/07/2017, Kauan Mocelin escreveu:
> Boa tarde, estou com um problema no postgresql que não consigo resolver,
> tenho a seguinte relação n x n:
>
> *tb_aditivo*
> cod_aditivo
>
> *tb_aditivo_motivo_aditivo*
> cod_aditivo_motivo_aditivo
> cod_aditivo
> cod_motivo_aditivo
>
> *tb_motivo_aditivo*
> cod_motivo_aditivo
>
>
> Na minha pesquisa informo 3 cod_motivo_aditivo = (2,4,8), preciso retornar
> o cod_aditivo referente a EXATAMENTE estes 3 motivos.
>
> Tentei fazer de várias formas com o IN, mas não da certo pois um aditivo
> pode ter os motivos 1,4,8, neste caso como o IN funciona com OR não vai
> trazer exatamente os caras que eu preciso.
>


Tente:
SELECT cod_aditivo FROM tb_aditivo_motivo_aditivo WHERE
EXISTS (SELECT * FROM tb_aditivo_motivo_aditivo WHERE
cod_motivo_aditivo = 2) AND
EXISTS (SELECT * FROM tb_aditivo_motivo_aditivo WHERE
cod_motivo_aditivo = 4) AND
EXISTS (SELECT * FROM tb_aditivo_motivo_aditivo WHERE 
cod_motivo_aditivo = 8);

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Constoria Remota

2017-07-13 Por tôpico Osvaldo Kussama
Em 13/07/2017, Flavio Rescia Dias escreveu:
> Bom dia,
>
> Alguém interessado em consultoria remota? Aplicar boas práticas,  backup,
> replicação e validar queries antes de entrar em produção (sempre com um dia
> de prazo pelo menos).
>
> Se tiverem interesse, enviar privado.
>


Dúvida:
Você está oferecendo sua consultoria ou querendo contratar uma consultoria?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] RES: SQL Select

2017-06-23 Por tôpico Osvaldo Kussama
Em 23/06/2017, Ricardo escreveu:
> Descobri aonde está o erro. Nem sempre tem registro entrada e saida no mes,
> dando o erro.
> Por exemplo:
> Tipo  |  Mês  |  Valor Entrada | Valor Saida |
>
> -
>
>E| 1| 100,00 |0  |
>
>S| 1| 0  | 200,00|
>
>E| 2|  150,00|0  |
>
>S| 2| 0  |230,00 |
>
>E| 3| 200,00 |0  |
>
>S| 3| 0  |310,00 |
>
>E| 4| 220,00 |0  |
>
>S| 5| 0  |350,00 |
>
>E| 5| 240,00 |0  |
>
>
>
>
>
> Usando select não vou conseguir, vou trabalhar com um função para seguar
> nesse resultado abaixo.
>
>
>
> |  Mês  |  Valor Entrada | Valor Saida | Resultado ( Valor Entrada –
> Valor Saida ) do Mês
>
> --
>
> | 1| 100,00 | 200,00|  -100,00
>
> | 2| 150,00|  230,00|-80,00
>
> | 3| 200,00 | 310,00|  -110,00
>
> | 4| 220,00 |0  |-90,00 –> Não
> tem o registro de saida do mes 4, usar o valor do mes anterior ( 220,00 –
> 310,00 )
>
> | 5| 240,00 | 350,00|  -110,00
>
>


Mas isto tem algum sentido?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Como instalar extensão no postgresql 9.4.4 Windows

2017-05-08 Por tôpico Osvaldo Kussama
Em 04/05/2017, j...@inbraco.com escreveu:
> Senhores preciso instalar a função crosstab que esta na extensão tablefunc
> no PostgreSql 9.4.4 Windows.
>
> E não sei como proceder, preciso de sua ajuda.
>
>


Veja:
https://www.postgresql.org/docs/9.4/static/contrib.html

Provavelmente você utilizará CREATE EXTENSION:
https://www.postgresql.org/docs/9.4/static/sql-createextension.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Recuperar Base PostgreSQL pasta data

2017-04-21 Por tôpico Osvaldo Kussama
Em 21/04/2017, Edson Lidorio escreveu:

> Sim, é a mesma versão 9.6.2
>

Pelo que entendi de sua mensagem original o PostgreSQL não estava
devidamente parado no momento do crash. Repare no item 1:

"The database server must be shut down in order to get a usable backup."

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Recuperar Base PostgreSQL pasta data

2017-04-21 Por tôpico Osvaldo Kussama
Em 21/04/2017, POWER Informática escreveu:
> Edson sou apenas "coruja" aqui na lista, mas esse procedimento de apenas
> copiar a pasta data eu já li que não funciona.
>
> O que me leva a crer que os dados e suas validações não ficam apenas
> nessa pasta, com a palavra os universitários;
>
> Carlos Susviela
>


Restaurar um banco de dados a partir da cópia do diretório funciona e
o processo está descrito em:
https://www.postgresql.org/docs/current/static/backup-file.html
desde que respeitadas as restrições descritas no manual.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Quantidade de itens relacionados ( Deletar )

2016-11-11 Por tôpico Osvaldo Kussama
Em 11/11/16, POWER Informática escreveu:
> Em um aplicativo PHP ( PostgreSql 8.4 ),
> Tenho duas tabelas (grupoproduto e produto )   ON DELETE NO ACTION;
>
> Preciso desabilitar o botão excluir ( grupoproduto ) se existirem na
> tabela ( produto ) referências a essa linha.
> Talvez um COUNT for idproduto na tabela grupoprodutos, resolva mas ..
> essa seria uma boa prática, pois me parece que vai acessar grupo
> produtos tantas vezes quanto forem os registros de produtos.
>

A versão 8.4 deixou de receber qualquer atualização e suporte a partir
de Julho de 2014.
Atualize para uma versão mais recente, por exemplo a 9.6 de Setembro de 2016.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Picos de atendimento

2016-11-09 Por tôpico Osvaldo Kussama
Em 09/11/16, Osvaldo Kussama<osvaldo.kuss...@gmail.com> escreveu:
> Em 09/11/16, Carlos Antônio<carlosanto...@utivida.com.br> escreveu:
>> Bom dia, pessoal
>>
>> Tenho uma tabela com os campos:
>> ...
>>   hsaequ timestamp without time zone,
>>   hchde1 timestamp without time zone,
>>   hsade1 timestamp without time zone,
>>   hchde2 timestamp without time zone,
>>   hsade2 timestamp without time zone,
>>   hrede1 timestamp without time zone,
>>   hlimov timestamp without time zone,
>> ...
>>
>> Onde:
>>   hsaequ - Hora de saída para o serviço
>>   hchde1 - Hora de chegada ao destino 1
>>   hsade1 - Hora de saída do destino 1
>>   hchde2 - Hora de chegada ao destino 2
>>   hsade2 - Hora de saída do destino 2
>>   hrede1 - Hora de retorno ao destino 1
>>   hlimov - Hora de liberação da equipe
>>
>>
>> Para determinar o pico de atendimento, eu fiz uma view conforme abaixo:
>>
>> ...
>> AS SELECT
>>
>> num_servico,
>>
>> -- Horarios de 00 a 23 horas
>> CASE
>> WHEN to_char(hsaequ, '-mm-dd 00'::text || ':00')::timestamp
>> BETWEEN to_char(hsaequ, '-mm-dd HH24'::text || ':00')::timestamp AND
>> to_char(hlimov, '-mm-dd HH24'::text || ':00')::timestamp THEN
>> 1
>> ELSE
>> 0
>> END as _00,
>>
>> ...
>>
>> CASE
>> WHEN to_char(hsaequ, '-mm-dd 23'::text || ':00')::timestamp
>> BETWEEN to_char(hsaequ, '-mm-dd HH24'::text || ':23')::timestamp AND
>> to_char(hlimov, '-mm-dd HH24'::text || ':23')::timestamp THEN
>> 1
>> ELSE
>> 0
>> END as _23 from servico_recursos
>>
>>
>> A intenção desta view é determinar a ocupação da equipe em um determinado
>> período.
>> O que estou fazendo é pegar a parte do campo que representa a hora (em
>> hsaequ e hlimov) e contando  hsaequ dentro desse intervalo.
>> Quando estiver no intervalo, conta 1. Caso contrário, conta 0.
>>
>> Exemplos de contagem (resultado da view):
>>
>> hsaequ = 01-12-2013 09:21
>> hlimov = 01-12-2013 11:21
>> 09:00 = 1
>> 10:00 = 1
>> 11:00 = 1
>>
>>
>> hsaequ = 01-12-2013 07:05
>> hlimov = 01-12-2013 13:01
>> 07:00 = 1
>> 08:00 = 1
>> 09:00 = 1
>> 10:00 = 1
>> 11:00 = 1
>> 12:00 = 1
>> 13:00 = 1
>>
>>
>> Posteriormente, para construir o relatório de ocupação, outrra view se
>> faz
>> necessária:
>> AS SELECT
>> ...
>>
>> sum(_00) AS soma_00,
>> sum(_01) AS soma_01,
>> sum(_02) AS soma_02,
>> sum(_03) AS soma_03,
>> ...
>> sum(_23) AS soma_23
>>
>> FROM view_picos_hsaequ
>>
>> WHERE ...
>>
>>
>> Finalmente, se consegui me fazer entender, gostaria de opiniões e
>> sugestões,
>> e se estou correto nesta lógica...
>> Se é possível outra lógica mais precisa... Idéias...
>>
>
>
> Não seria mais simples utilizar a função date_trunc [1] do que
> formatar sua data para texto?
>
> [1]
> https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
>

Ou mesmo utilizar a função extract com hour?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Picos de atendimento

2016-11-09 Por tôpico Osvaldo Kussama
Em 09/11/16, Carlos Antônio escreveu:
> Bom dia, pessoal
>
> Tenho uma tabela com os campos:
> ...
>   hsaequ timestamp without time zone,
>   hchde1 timestamp without time zone,
>   hsade1 timestamp without time zone,
>   hchde2 timestamp without time zone,
>   hsade2 timestamp without time zone,
>   hrede1 timestamp without time zone,
>   hlimov timestamp without time zone,
> ...
>
> Onde:
>   hsaequ - Hora de saída para o serviço
>   hchde1 - Hora de chegada ao destino 1
>   hsade1 - Hora de saída do destino 1
>   hchde2 - Hora de chegada ao destino 2
>   hsade2 - Hora de saída do destino 2
>   hrede1 - Hora de retorno ao destino 1
>   hlimov - Hora de liberação da equipe
>
>
> Para determinar o pico de atendimento, eu fiz uma view conforme abaixo:
>
> ...
> AS SELECT
>
> num_servico,
>
> -- Horarios de 00 a 23 horas
> CASE
> WHEN to_char(hsaequ, '-mm-dd 00'::text || ':00')::timestamp
> BETWEEN to_char(hsaequ, '-mm-dd HH24'::text || ':00')::timestamp AND
> to_char(hlimov, '-mm-dd HH24'::text || ':00')::timestamp THEN
> 1
> ELSE
> 0
> END as _00,
>
> ...
>
> CASE
> WHEN to_char(hsaequ, '-mm-dd 23'::text || ':00')::timestamp
> BETWEEN to_char(hsaequ, '-mm-dd HH24'::text || ':23')::timestamp AND
> to_char(hlimov, '-mm-dd HH24'::text || ':23')::timestamp THEN
> 1
> ELSE
> 0
> END as _23 from servico_recursos
>
>
> A intenção desta view é determinar a ocupação da equipe em um determinado
> período.
> O que estou fazendo é pegar a parte do campo que representa a hora (em
> hsaequ e hlimov) e contando  hsaequ dentro desse intervalo.
> Quando estiver no intervalo, conta 1. Caso contrário, conta 0.
>
> Exemplos de contagem (resultado da view):
>
> hsaequ = 01-12-2013 09:21
> hlimov = 01-12-2013 11:21
> 09:00 = 1
> 10:00 = 1
> 11:00 = 1
>
>
> hsaequ = 01-12-2013 07:05
> hlimov = 01-12-2013 13:01
> 07:00 = 1
> 08:00 = 1
> 09:00 = 1
> 10:00 = 1
> 11:00 = 1
> 12:00 = 1
> 13:00 = 1
>
>
> Posteriormente, para construir o relatório de ocupação, outrra view se faz
> necessária:
> AS SELECT
> ...
>
> sum(_00) AS soma_00,
> sum(_01) AS soma_01,
> sum(_02) AS soma_02,
> sum(_03) AS soma_03,
> ...
> sum(_23) AS soma_23
>
> FROM view_picos_hsaequ
>
> WHERE ...
>
>
> Finalmente, se consegui me fazer entender, gostaria de opiniões e sugestões,
> e se estou correto nesta lógica...
> Se é possível outra lógica mais precisa... Idéias...
>


Não seria mais simples utilizar a função date_trunc [1] do que
formatar sua data para texto?

[1] 
https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SUM de varios periodos em uma mesma consulta

2016-11-08 Por tôpico Osvaldo Kussama
Em 08/11/16, Alan Tavares escreveu:
> Pessoal
>
> Estou com uma dúvida o caso é o seguinte
> Tenho uma tabela de vendas e tenho que fazer um relatório que o gerente
> quer saber a quantidade vendida em 3 períodos 7, 15 e 30 dias de todos os
> produtos na mesma tela alem de poder escolher um pediodo customizado.
> A tabela de pedidos tem em torno de 300 mil registros e mensalmente algo em
> torno de 20 mil.
> Já consegui convencer de que não daria pra fazer em tempo real e limitar o
> periodo para no maximo 90 dias.
> A solução q fiz foi a seguinte
> Criei uma view materializada com os dados das vendas dos ultimos 90 dias, a
> partir dessa view criei mais 3 views materializadas para cada um dos
> periodos 7, 15, 30
> onde faço o sum dos produtos e para exibição dou um join nessas 3 views
> materializadas e em uma outra view do produto com a quantidade em estoque.
> Segue abaixo.
>
> select a.produto,
>   a.estoque,
>   b.qnt_7,
>   c.qnt_15,
>   d.qnt_30
> from vendas.vw_produtos a
> inner join vendas.vm_vendas_7 b on a.id = b.id
> inner join vendas.vm_vendas_15 c on a.id = c.id
> inner join vendas.vm_vendas_30 d on a.id = d.id
>
> Existe alguma solução que de para fazer os sum de periodos diferentes na
> mesma consulta.
>
> Desde já obrigado.
>
> Alan Costa
>

Utilize o CASE.
Para o dado período some a quantidade, caso contrário 0.

Algo do tipo:
... SUM( CASE WHEN (sua_data < CURRENT_DATE-INTERVAL '7 DAYS') THEN
quantidade ELSE 0 END) ...

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Não consigo fazer backup

2016-10-18 Por tôpico Osvaldo Kussama
Em 18/10/16, Amir escreveu:
> Estou fazendo backup na versão 9.6 mas os arquivos foram gerados em 9.3
>


Explique melhor o que você entende por "fazer back-up".

Mostre o comando utilizado.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Ordenar por data

2016-09-12 Por tôpico Osvaldo Kussama
Em 12/09/16, Ricardo escreveu:
> Boa tarde pessoal,
>
> Tenho um tabela com os campos Referencia e ano com os seguintes dados,
>
> "Dezembro à Janeiro"  "2016"
> "Fevereiro à Março""2016"
> "Março à Abril""2016"
> "Dezembro à Janeiro"  "2016"
> "Dezembro à Janeiro"  "2016"
> "Junho à Julho""2016"
> "Julho à Agosto"  "2016"
> "Dezembro à Janeiro"  "2016"
> "Abril à Maio"  "2016"
> "Dezembro à Janeiro"  "2016"
>
> Preciso fazer um select ordenando pela data formada por esses dois campos e
> comecei desta forma,
>
> SELECT  '01/' || SUBSTRING( "Referencia", 0, POSITION(' à ' in "Referencia"
> ) ) || '/' || "Ano" as "Data" ORDER BY “Data”;
>
> O resultado do campo ficou ‘01/Dezembro/2016’, porém não consigo converter
> para tipo date e ordenar de forma correta.
>
> Alguma sugestão ?
>

Veja a função to_date.
https://www.postgresql.org/docs/current/static/functions-formatting.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Commit a cada Insert ou N registros?

2016-08-26 Por tôpico Osvaldo Kussama
Em 26/08/16, siste...@mvsoftware.com.br escreveu:
> From: Douglas Fabiano Specht
> Sent: Friday, August 26, 2016 11:16 AM
> To: Comunidade PostgreSQL Brasileira
> Subject: Re: [pgbr-geral] Commit a cada Insert ou N registros?
>
>
> Obrigado pela resposta Douglas, eu fiz uns testes aqui e relamente commit em
> bloco é mais rápido, minha duvida é com relação a quantidade de registros
> que posso manter em cache antes do commit, eu gostaria que, se a transação
> desse algum erro ele não alterasse nada, pois se der um erro vou pedir ao
> usuario para executar a rotina novamente após a correção, mas vou ter que
> estudar melhor isso, pois creio que haja um limite nesse bloco, nada que
> umas validações a mais não resolva.
>


Note que se você fizer COMMIT a cada n registros e der algum problema
muito provavelmente você já terá permanentemente em sua base os
registros já commitados.
Não será possível simplesmente reexecutar a rotina. A rotina tem que
saber a partir de que ponto ela deve continuar o processamento.
Uma possível solução é você imprimir a cada COMMIT a quantidade de
registros já processados e, em caso de reprocessamento, informar ao
programa quantos registros ele deve saltar.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Conexões inativas não são liberadas

2016-08-07 Por tôpico Osvaldo Kussama
Em 07/08/16, Marcelo Zoel escreveu:
> Boa tarde a todos,
>
> sou novato no PostgreSQL e gostaria de pedir ajuda nesta lista para
> solucionar um problema que está ocorrendo com um sistema desenvolvido por
> terceiros para minha empresa.
>
> O Postgre acusa que não há mais conexões disponíveis após algum tempo de
> uso do sistema, No momento não tenho outra solução a não ser derrubar o
> banco e iniciar novamente.
>
> Acredito que o problema esteja relacionado a forma como o sistema está
> interagindo com o banco, porém não conseguirei obter resposta do
> desenvolvedor para uma possível solução em curto prazo.
>
> Reparei que as conexões estão em IDLE e minha expectativa é que o Postgre
> derrubasse essas conexões por inatividade após algum período de tempo
> determinado em configuração. Fiz algumas pesquisas e fiquei surpresa que
> ele não tem nenhum suporte nativo para esta função.
>
> Minha pergunta é como posso implementar isso da melhor forma e sem precisar
> mexer muito na minha infraestrutura e a aplicação.
>
> minha versão é a 9.3 rodando em RHEL 6.8.
>
> Agradeço a todos pela paciência.
>
> Marcelo
>

Lembrando que o ideal é que a aplicação fosse corrigida e fechasse a
conexão ao final da utilização.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Separar inteiro

2016-04-22 Por tôpico Osvaldo Kussama
Em 22/04/16, Ricardo escreveu:
> Bom dia pessoal,
>
> Preciso capturar os caracteres de um campo varchar até achar um
> caractere que não seja número. Por exemplo:
>
> 122-43 – Aqui preciso capturar 122;
> 33a12 – aqui 33;
> 556 – aqui 556.
>
> Alguém pode me dar alguma dica. É para ordenar um select que tem que
> obedecer os primeiros números.
>

teste=# SELECT substring('122-43', E'\\d+');
 substring
---
 122
(1 row)

teste=# SELECT substring('33a12', E'\\d+');
 substring
---
 33
(1 row)

teste=# SELECT substring('556', E'\\d+');
 substring
---
 556
(1 row)

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Problemas de desempenho

2016-04-04 Por tôpico Osvaldo Kussama
2016-04-04 17:15 GMT-03:00, Márcio A. Sepp :
>
> Bom dia,
>
>
> Atualizei um servidor que estava utilizando a versão 9.0 para a 9.4.7 e após
> atualização esta query passou a ficar extremamente lenta.
>
> SQL:
> select movto_lote.nr_dcto
> from fin_receber_parc parc
> inner join fin_receber receber on (receber.cd_movto = parc.cd_movto_rec and
>receber.cd_serie_lcto =
> parc.cd_serie_lcto)
> inner join fin_receber_cnt cnt on (cnt.cd_movto_rec= receber.cd_movto and
>cnt.cd_serie_lcto=receber.cd_serie_lcto)
> inner join cnt_movto movto on (cnt.cd_movto=movto.cd_movto and
>movto.cd_serie_lcto=cnt.cd_serie_lcto)
> inner join cnt_movto_lote movto_lote on (movto_lote.cd_movto =
> movto.cd_movto_lote and
>  movto_lote.cd_serie_lcto =
> movto.cd_serie_lcto)
> inner join cnt_competencia competencia on (competencia.cd_competencia =
> movto_lote.cd_competencia)
> inner join uni_emitente emitente on (emitente.cd_emitente =
> receber.cd_devedor)
> inner join fin_especie especie on (especie.cd_especie = parc.cd_especie )
> where upper(coalesce(movto_lote.ds_historico, '%')) like upper('%%') and
>   upper(coalesce(movto_lote.nr_dcto, '%')) like upper('%%') and
>   upper(coalesce(competencia.nm_competencia, '%')) like upper('%%') and
>   upper(coalesce(emitente.nm_emitentecompleto, '%')) like
> upper('%consumidor%') and
>   coalesce(parc.vl_valor, 0) between coalesce(0, 0) and
> coalesce(99.99, 9) and
>   coalesce(receber.cd_devedor, 0) between coalesce(0, 0) and
> coalesce(9, 9) and
>   movto_lote.dt_movto between ('01/01/2000') and ('01/03/') and
>   parc.dt_vcto between ('01/01/2000') and ('31/12/') and
>   parc.st_quitado = false and
>   movto_lote.cd_estabelecimento=1
> order by parc.dt_vcto desc
>
>
> Saída do Explain Analyze:
> "Sort  (cost=4779.91..4779.91 rows=1 width=16) (actual
> time=128286.342..128286.342 rows=6 loops=1)"
> "  Sort Key: parc.dt_vcto DESC"
> "  Sort Method: quicksort  Memory: 25kB"
> "  ->  Nested Loop  (cost=1.96..4779.90 rows=1 width=16) (actual
> time=126064.707..128286.279 rows=6 loops=1)"
> "Join Filter: (parc.cd_especie = especie.cd_especie)"
> "Rows Removed by Join Filter: 36"
> "->  Nested Loop  (cost=1.96..4778.74 rows=1 width=18) (actual
> time=126064.672..128286.198 rows=6 loops=1)"
> "  ->  Nested Loop  (cost=1.68..4777.55 rows=1 width=22) (actual
> time=64031.477..128247.981 rows=3189 loops=1)"
> "Join Filter: (movto_lote.cd_competencia =
> competencia.cd_competencia)"
> "Rows Removed by Join Filter: 15945"
> "->  Nested Loop  (cost=1.68..4776.37 rows=1 width=26)
> (actual time=64031.432..128164.285 rows=3189 loops=1)"
> "  Join Filter: (receber.cd_serie_lcto =
> movto_lote.cd_serie_lcto)"
> "  ->  Nested Loop  (cost=1.26..4775.86 rows=1
> width=26) (actual time=0.085..128005.877 rows=6277 loops=1)"
> "Join Filter: (receber.cd_serie_lcto =
> movto.cd_serie_lcto)"
> "->  Nested Loop  (cost=0.83..4774.95 rows=1
> width=24) (actual time=0.078..127775.182 rows=6277 loops=1)"
> "  ->  Nested Loop  (cost=0.42..3012.16
> rows=1 width=30) (actual time=0.067..214.384 rows=6318 loops=1)"
> "->  Seq Scan on
> fin_receber_parc parc  (cost=0.00..2745.68 rows=32 width=16) (actual
> time=0.052..91.802 rows=6318 loops=1)"
> "  Filter: ((NOT st_quitado)
> AND (COALESCE(vl_valor, '0'::numeric) >= '0'::numeric) AND
> (COALESCE(vl_valor, '0'::numeric) <= 99.99) AND (dt_vcto >=
> '2000-01-01'::date) AND (dt_vcto <= '-12-31'::date))"
> "  Rows Removed by Filter:
> 81216"
> "->  Index Scan using
> "pk-fin_receber-geral" on fin_receber receber  (cost=0.42..8.32 rows=1
> width=14) (actual time=0.013..0.014 rows=1 loops=6318)"
> "  Index Cond: ((cd_movto =
> parc.cd_movto_rec) AND (cd_serie_lcto = parc.cd_serie_lcto))"
> "  Filter:
> ((COALESCE(cd_devedor, 0) >= 0) AND (COALESCE(cd_devedor, 0) <= 9))"
> "  ->  Index Scan using
> "pk-fin_receber_cnt-cd_movto-cd_serie_lcto" on fin_receber_cnt cnt
> (cost=0.42..1762.78 rows=1 width=18) (actual time=7.918..20.187 rows=1
> loops=6318)"
> "Index Cond: (cd_serie_lcto =
> receber.cd_serie_lcto)"
> "Filter: (receber.cd_movto =
> cd_movto_rec)"
> "   

Re: [pgbr-geral] REF: Duplicar Tabela com Chave Primaria

2016-03-09 Por tôpico Osvaldo Kussama
Em 09/03/16, Paulo escreveu:
> Olá Pessoal,
>
>
>
> Estou executado a seguinte instrução:
>
>
>
> CREATE TABLE chave_duplicada AS
>
> SELECT
>
>   *
>
>  FROM
>
>empresas
>
>  group by chave_inc
>
>  having count(chave_inc) > 1
>
>
>
>
>
> Porém não consigo visualizar os dados da nova tabela, recebo a mensagem:
>
>
>
>  Edit table data without primary key
>
>
>
> Alguém pode dar uma dica de como ao duplicar e já trazer a chave primária
> da
> tabela origem.
>


Me parece que sua tabela original não tem chave primária, ou pelo
menos não é este campo chave_inc, já que você está buscando os
duplicados.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Primeira Função

2016-03-04 Por tôpico Osvaldo Kussama
2016-03-04 9:49 GMT-03:00, Pablo Farias :
> Ola pessoal,
> sempre trabalhei com o firebird, porem venho migrando para o postgresql,
> porem tenho me esbarrado em algumas coisas que podem ser basicas para voce,
> mais pra eu vem dando um baita trabalhão.
>
> Estou tentando criar a seguinte função basica, só para eu entender o
> funcionamento da mesma, e aplicar mais informações a ela.
>
> A Function em sim é criada sem erro:
>
>
> Create or Replace Function fluxo_base(date, date) returns setof cliente as
> '
> declare
> data date;
>   begin
> return query SELECT
>   financeiro.id,financeiro.data_vencimento,
>   financeiro.numero_documento,
>   (SELECT sum(valor_parcela) FROM financeiro WHERE tipo_conta = "R"  and
> data_vencimento between $1 and $2) AS "Valor a Receber",
>   (SELECT sum(valor_parcela) FROM financeiro WHERE tipo_conta = "P" and
> data_vencimento between $1 and $2) AS "Valor a Pagar"
> FROM
>   financeiro;
> return;
>   end
> '
> language 'plpgsql'
>
>
> Porem quando eu chamo ela assim:
>
> select * from fluxo_base("05/03/2015","20/07/2018");
>
> Ela gera o seguinte erro:
>
> ERROR:  column "05/03/2015" does not exist
> LINE 1: select * from fluxo_base("05/03/2015","20/07/2018");
>  ^
> ** Error **
>
> ERROR: column "05/03/2015" does not exist
> SQL state: 42703
> Character: 26
>
>


Quando você faz:
... tipo_conta = "R" ...
você está comparando o campo tipo_conta com a variável denominada "R"
e não com a consttante 'R'. Idem para "P".

Tente:
Create or Replace Function fluxo_base(date, date) returns setof cliente as
$$
declare
data date;
  begin
return query SELECT
  financeiro.id,financeiro.data_vencimento,
  financeiro.numero_documento,
  (SELECT sum(valor_parcela) FROM financeiro WHERE tipo_conta = 'R'
and data_vencimento between $1 and $2) AS "Valor a Receber",
  (SELECT sum(valor_parcela) FROM financeiro WHERE tipo_conta = 'P'
and data_vencimento between $1 and $2) AS "Valor a Pagar"
FROM
  financeiro;
  end
$$
language 'plpgsql'

e
select * from fluxo_base('05/03/2015'::date, '20/07/2018'::date);

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Consulta Cross-Tab

2016-02-19 Por tôpico Osvaldo Kussama
Em 18/02/16, André Ormenese escreveu:
> Boa tarde pessoal.
>
> Vou dar um exemplo de consulta em cross-tab que gostaria de fazer, e vejam
> se é possível.
>
> Tenho duas tabelas, uma com código e descrição de produtos do sangue, e
> outra que armazena os dados de resultados de bolsas de sangue fracionada.
>
> Uma bolsa fracionada pode gerar um ou mais produtos.
>
> A tabela1 tem os dados :
> (código, descrição)
> 1 -  Hemacia
> 2 -  Plaqueta
> 3 -  Plasma
>
> A tabela2 o fracionamento de cada bolsa de sangue :
>  (bolsa, produto, qtdade)
> b11  100
> b12  135
> b13  150
> b21  200
> b23  167
>
> Queria fazer uma consulta que me mostrasse os produtos na coluna correta do
> cross-tab, assim :
>
> Bolsa   Hemacia   Plaqueta   Plasma
>b1100   135  150
>b2200  167
>
> Só consigo este resultado :
> Bolsa   Hemacia   Plaqueta   Plasma
>b1100   135  150
>b2200   167
>
>
> Estou executando :
>
> Select * from crosstab (
> 'select bolsa,produto,qtdade from fraciona
> inner join tproduto on tproduto.codigo = fraciona.produto
> order by bolsa') as resultado("Bolsa","Hemacia","Plaqueta","Plasma");
>
> A solução é fazer que a consulta interna do cross-tab gere uma linha assim
> :
> b22  null
>
> Já tentei com right join mas não funcionou.
>
> Alguma ideia ?
>

Me parece que você deveria utilizar LEFT OUTER JOIN.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Aprender PL/SQL (retificando)

2016-02-17 Por tôpico Osvaldo Kussama
Em 17/02/16, Anderson Martins escreveu:
> Olá PessoALL
>
> Tenho interesse em aprimorar meu banco incluindo rotinas escritas em PL/SQL,
> mas não sei como fazer.
>
> Gostaria de saber se alguém teria alguma indicação de apostila ou livro
> sobre PL/SQL para postgresql. (meu orçamento está na crise, não tenho cash
> pra pagar cursos).
>
>

Veja:
https://www.packtpub.com/big-data-and-business-intelligence/postgresql-server-programming-second-edition

Se não me engano ele foi liberado gratuitamente a pouco tempo atrás.
Não sei se alguém que fez o download pode disponibilizar para você.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Erro "$ libdir / _int":

2016-02-09 Por tôpico Osvaldo Kussama
Em 09/02/16, Thiago H. Barreto escreveu:
> Boa tarde Galera.
>
> Estou precisando da ajuda de vocês.
> Tive que mudar um servidor que esta com problemas e quando acesso a
> aplicação dá o seguinte erro.. "não pôde acessar arquivo "$libdir/_int":
> Arquivo ou diretório não encontrado."
>
> Eu encontrei a seguinte explicação no google
>
> "Se você receber o erro ERRO: não foi possível acessar o arquivo "$ libdir
> / _int": Nenhum tal lima ou diretório , o que significa que os *intArray* e
> *intagg* extensões precisam ser instalados no PostgreSQL."
>
> Alguem sabe como criar estas extensões no Ubuntu? Estou utilizando a versão
> 14.04.
>


Veja:
CREATE EXTENSION em:
http://www.postgresql.org/docs/current/interactive/contrib.html
e
http://www.postgresql.org/docs/current/interactive/sql-createextension.html

além de:
http://www.postgresql.org/docs/current/interactive/intagg.html
http://www.postgresql.org/docs/current/interactive/intarray.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Inteligência do postgresql ao fazer update

2016-02-07 Por tôpico Osvaldo Kussama
Em 07/02/16, Saraiva Silva escreveu:
> Pois é, meu interesse é porque eu tenho funções que fazem inserções e
> updates. Como não é possível saber quais colunas o usuário irá atualizar,
> então minha função de atualização tem parâmetros para todas as colunas. Mas
> em uma tabela com 15 colunas, e o usuário alterar apenas uma coluna de um
> registro, a função vai desperdiçar recursos. Pois ela irá atualizar todas
> as outras colunas com dados repetidos.
> O desafio é atualizar somente as colunas que realmente foram alteradas.
> Como exemplo uma função que faz update em uma tabela de CEPs:
>
> http://paste.ubuntu.com/14962205/
>
> Como fazer a função atualizar somente as colunas alteradas?
>


Creio que você deveria dar uma estudada no modelo MVCC utilizado pelo
PostgreSQL.
http://www.postgresql.org/docs/current/interactive/mvcc.html
A cada updade uma nova versão do registro é gerada, ou seja, o
possível desperdício de recursos é mínimo frente a reescrever todo o
registro.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Relançar exceção depois de capturar

2016-02-06 Por tôpico Osvaldo Kussama
Em 06/02/16, Saraiva Silva escreveu:
> Preciso capturar qualquer exceção, executar um procedimento e relançar q
> exceção capturada.
> A intenção é executar uma ação se alguma exceção ocorrer mas não impedir
> que ela "Exploda".
> Em python eu faço isso assim:
>
> thy:
> /*some_code*/
> except Exception:
> /*Do something*/
> raise
>
> Ou seja, aqui eu apenas faço uma ação se qualquer exceção occorer, mas não
> impeço que ela "estoure" (comando raise sozinho).
>
> Como fazer o mesmo em pl/pgslq?
>


RAISE EXCEPTION não atende?
http://www.postgresql.org/docs/9.5/static/plpgsql-errors-and-messages.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SQL DINAMICO DENTRO DE UM PL

2016-02-02 Por tôpico Osvaldo Kussama
Em 02/02/16, Osvaldo Kussama<osvaldo.kuss...@gmail.com> escreveu:
> Em 02/02/16, lu moraes santos<djrlumor...@gmail.com> escreveu:
>> Então como eu faria esta modelagem de gerar as parcelas de acordo com a
>> forma de pagamento
>>
>
> Por exemplo utilizando um array.
> De qualquer maneira me parece estranho que os períodos possam ser
> variáveis (um 30 dias, outro 15, outro 5, etc).
>
> Certamente definindo uma quantidade de variáveis que atendam a todas
> as possibilidades não me parece um bom caminho.
>
> Osvaldo
>

Aliás: por que não um tabela?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SQL DINAMICO DENTRO DE UM PL

2016-02-02 Por tôpico Osvaldo Kussama
Em 02/02/16, lu moraes santos escreveu:
> Então como eu faria esta modelagem de gerar as parcelas de acordo com a
> forma de pagamento
>

Por exemplo utilizando um array.
De qualquer maneira me parece estranho que os períodos possam ser
variáveis (um 30 dias, outro 15, outro 5, etc).

Certamente definindo uma quantidade de variáveis que atendam a todas
as possibilidades não me parece um bom caminho.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SQL DINAMICO DENTRO DE UM PL

2016-02-01 Por tôpico Osvaldo Kussama
Em 01/02/16, lu moraes santos escreveu:
> veja pra vc entender:
>
> id_pagto  descricaoqtdparc   p1  p2  p3  p4  p5  p6 .P12
>1   A Vista   1  0
>2  Entrada + 30   2  0   30
>3Entr/30/60 3  0   30   60
>430/60/903 30  60   90
>530/45/503 30  45   50
>
> Os campos p1 ate p12 DETERMINA O INTERVALO DOS VENCIMENTO
>
> O Campo qtdparc DETERMINA A QTDE DE PARCELAS
>
> Se vc fizer uma compra de 100,00 usando id_pagto=2 ficaria:
>
> 50,00 pra hj (current_date + 0)
> 50,00 para 02/03/2016  (current_date + 30)
>


Creio que você deva repensar sua solução.
Me parece sem sentido você utilizar estas múltiplas variáveis.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SQL DINAMICO DENTRO DE UM PL

2016-02-01 Por tôpico Osvaldo Kussama
Em 01/02/16, lu moraes santos escreveu:
> Ola bom dia Osvaldo.
>
> quando vc usa o comando INTO dDataVencto USING i; ele vai substituir o
> conteudo do parametro $1 pelo conteudo de i, entao se fosse traduzir o sql:
>
> Select Current_date + P1 from condpagto WHERE id_pagto=6; entao seria:
>
> EXECUTE 'SELECT current_date + P*$1* FROM condpagto WHERE id_pagto=6' INTO
> dDataVencto USING i; ?
>
> Se for ai da o seguinte erro:
>
> ERROR:  column "p$1" does not exist
> LINE 1: SELECT  current_date + p$1 FROM condpagto WHERE id_pagto = 6
>^
> HINT:  Perhaps you meant to reference the column "condpagto.p1" or the
> column "condpagto.p11".
>


Sinceramente não vejo muito sentido na utilização destas variáveis pi
para definir a quantidade de dias para o vencimento de cada parcela.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] SQL DINAMICO DENTRO DE UM PL

2016-02-01 Por tôpico Osvaldo Kussama
Em 01/02/16, lu moraes santos escreveu:
> Ola bom dia a todos.
>
> Estou precisando montar um sql dinamico dentro de uma PL, tenho uma tabela
> de cond. pagto onde devo destacar os seguinte campos:
>
> qtdparc = quantidade de parcelas
>
> p1 ate p12 ou seja os dias de vencto de cada parcela, exemplo:
>
> qtdparc=2
> p1=30
> p2=60
>
> ou seja 2 parcelas = 30 + 60  os vencimentos
>
> estou fazendo um loop na qtde de parcelas pra gerar o valor e vencto de
> cada parcela:
>
> for i in 1..qtdparc
>  loop
>
> -- eu fiz da seguinte forma:
>
>   execute 'select into dDataVencto current_date + p' || i ||' from
> condpagto where   id_pagto= 6';
>
> -- O dDataVencto  é uma variavel do tipo Date para receber a data de hoje +
> n
> -- dias
>
> -- note que 'p'|| i é pra concatenar o p + valor de i no loop para pegar a
> parcela (p1 ou p2 ou p3 ou pnvezes)
>
> -- aqui em baixo o resto do codigo.
>
>  end loop;
>
>
> Porem ao executar da erro de sintaxe.
>
>

Tente:

EXECUTE 'SELECT  current_date + $1*30 FROM condpagto WHERE id_pagto =
6' INTO dDataVencto USING i;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] wrap for postgres

2016-01-21 Por tôpico Osvaldo Kussama
Em 21/01/16, Douglas Fabiano Specht escreveu:
> boa noite pessoal,
> como vamos ter algumas funções no banco de dados, como podemos restringir a
> visualização dos fontes das funções?
> encontrei algumas pagas mas queria algo open, ou nativo
>
> pl secure:
> http://www.enterprisedb.com/docs/en/8.4/plsecure/Postgres_Plus_Standard_Server_PL_Secure_PLpgSQL-01.htm#P26_217
>
> plpgsql_sec:
> http://www.cybertec.at/en/products/plpgsql_sec-encrypt-your-stored-procedure-codes/
>
>


Desenvolva em C.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Dúvida sobre postgres_fdw

2016-01-05 Por tôpico Osvaldo Kussama
Em 05/01/16, lu moraes santos escreveu:
> Ola boa tarde a todos.
> Eu uso o postgres no windows pois atendo clientes de comercio que nao tem
> muito como investir em um servidor dedicado. Eu precisaria de ferramenta
> para replicação, onde eu poderia escolher a tabela para ser replicada.
>


Desculpe minha ignorância, mas sua questão tem algo a ver com o que
estava sendo discutido nesta thread?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Dúvida sobre postgres_fdw

2016-01-05 Por tôpico Osvaldo Kussama
Em 05/01/16, lu moraes santos escreveu:
> DESCULPA AMIGO , eu postei daqui mesmo deste email , ao inves de colocar
> isto no forum , grato
>
>


Das " Regras da lista de discussão":

"organização do histórico da lista.
Eu já repeti isso aqui algumas vezes e outras pessoas também. É um
novo assunto então crie um assunto (e-mail) novo. Criar um assunto
novo não quer dizer clicar em 'Responder' (aka Reply), apagar o
assunto antigo e escrever um novo; isso não remove o vínculo deste
e-mail com o antigo. Para que tenhamos um bom histórico, não faça
isso;"

Osvaldo

https://www.postgresql.org.br/RegrasLista
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] TRANSFORMAR INTEIRO EM MÊS POR EXTENSO

2015-12-03 Por tôpico Osvaldo Kussama
Em 03/12/15, Crauss, Jacson escreveu:
> 2015-12-02 19:45 GMT-02:00 Eduardo Az - EMBRASIS
> 
> :
>
>> Quando utilizo to_char. como abaixo, considerando que "data" é um campo
>> formato data:
>>
>> select to_char(data,'TMmonth')
>>
>> ele retorna, neste caso, o mês por extenso.
>>
>> Porém, numa tabela, tenho um campo smallint que tem nele o mês.
>> Não estou conseguindo fazer aparecer o mês por extenso, pois dá erro.
>>
>> Existe alguma função que faria isso?
>> Pensei até em colocar este mês em uma função, que converteria em formato
>> data e ai mostraria, mas, se tiver uma função, sem eu precisar fazer esta
>> "conversão louca", seria melhor.
>>
>
>
> Não conheço nenhuma função, mas assim funciona:
>
> SELECT to_char(to_date('01' || 11 || '1900', 'ddmm'), 'TMMonth') AS
> mes_extenso;
>
> Troca o 11 pelo campo smallint ;-)
>


Pode simplificar:
SELECT to_char(to_date(11::text, 'mm'), 'TMMonth');
 to_char
--
 Novembro
(1 row)

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Tipos de dados

2015-11-23 Por tôpico Osvaldo Kussama
Em 23/11/15, Guimarães Faria Corcete DUTRA, Leandro escreveu:
> 2015-11-23 15:58 GMT-02:00 Sebastian Webber :
>>
>> Meu caro Dutra, segundo a doc[1], dá pra dizer que:
>>
>> CREATE DOMAIN creates a new domain. A domain is essentially a data type
>> with
>> optional constraints (restrictions on the allowed set of values) ...
>
> Então, mais ou menos… esse é um ponto em que nossa documentação comete
> um erro conceitual grosseiro.
>
>
>> Domains are useful for abstracting common constraints on fields into a
>> single location for maintenance.
>
> Perfeito, mas não apenas.
>
> O DOMAIN do SQL, que o PostgreSQL segue, não é domínio de verdade.
> Creio que já (tentei) explicar isso aqui antes, mas como é um dos meus
> assuntos favoritos, tentarei de novo:
>
> Um domínio é uma lista de valores — conceitualmente, porque podem ser
> valores contínuos (não discretos), caso em que a lista não pode ser
> realizada; idem para domínios infinitos.  Um tipo de dados é um
> domínio e seus operadores.
>
> Por exemplo, no caso ‘em tela’ (jargão aqui de Brasília), um CPF é um
> número de até onze caracteres, ou precisamente onze se o precedermos
> de zeros.  Até onde eu saiba; perdoem alguma imprecisão no exemplo.  O
> domínio CPF é constituído de todos os números de CPF válidos.  Como
> apenas os nove números excluindo os dois dígitos verificadores à
> direita são relevantes para gerar a lista, podemos dizer que o
> domínio, a princípio, seria de 1 a 999.999.999, concatenados com os
> respectivos dígitos verificadores.  No caso, suponho que 0 seja um
> caso especial, ou seja, que não haja um CPF 0-XX onde XX seriam os DVs
> correspondentes a 0.
>
> Já o tipo de dados seriam os operadores correspondentes.  Não consigo
> imaginar, de bate-pronto, algum operador que não seja o de identidade
> (comparação para ver se é igual ou diferente); por exemplo, não me
> parece fazer sentido querer concatenar, cortar, somar, subtrair,
> multiplicar, dividir, comparar se maior ou menos   Talvez
> operadores para extrair os dígitos significativos (os nove excetuando
> os DVs) e os dígitos verificadores.
>
> O interessante a reter é que não faz sentido operar num determinado
> domínio com operadores que não correspondam ao tipo.  Portanto, por
> definição, uma definição de domínio tem de excluir operações de outros
> tipos (por exemplo, concatenar ou multiplicar CPFs), ou que envolvam
> outros domínios sem que sejam operações especificamente previstas para
> o domínio em questão e outro domínio qualuqer (por exemplo, concatenar
> um CPF com um CNPJ, ou multiplicar um CPF por um CNPJ).
>
> Até onde já li e testei, um DOMAIN SQL não impede isso.  Teste; deve
> ser possível CREATE TABLE cpf (cpf AS cpf);  com esse DOMAIN, e fazer
> um SELECT cpf * 2 FROM cpf;, o que não seria possível com um domínio
> de verdade.
>
> Aproveitando para bater noutra tecla que me é cara, é por causa desse
> tipo de problema de confusão conceitual (embora não desse problema
> específico) que o SQL não é relacional: para começo de conversa, uma
> tabela SQL não necessariamente é uma relação (que precisa de ao menos
> uma chave natural), mas pode ser um saco (sem chave natural, ou seja,
> não é um conjunto).
>
>
>> For example, several tables might contain
>> email address columns, all requiring the same CHECK constraint to verify
>> the
>> address syntax. Define a domain rather than setting up each table's
>> constraint individually.
>
> Ou seja, é útil mesmo sem ser um domínio: é um atalho para declarar
> uma restrição de validação.
>
>
>> Chamamos isso de empate técnico? :D
>>
>> [1] http://www.postgresql.org/docs/current/static/sql-createdomain.htm
>
> Posso dizer que não é uma disputa, portanto não faz sentido falar em
> empate?  ;-)
>
>

Olá Dutra:

Não sei se existe CPF 0-XX mas o CNPJ do Banco de Brasil é:
00.000.000/0001-91

Que, pelas suas considerações, seria um domínio de 0 a 
acrescido da filial, de 0001 a , e dos DV.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Tipos de dados

2015-11-21 Por tôpico Osvaldo Kussama
Em 21/11/15, Luciano Reis escreveu:
> Bom dia pessoal, eu fiz uma busca sobre tipos de dados para campos
> específicos no PostgreSQL para gravar CEP,CPF, CNPJ, telefones e valores
> monetários e encontrei opiniões muito diversas uns defendem que CPF tem de
> ser guardado como string outros não.
> É um primeiro projeto que eu vou iniciar usando o PostgreSQL e não sei
> tomar essa decisão, como não encontrei nada concreto e fundamentado estou
> recorrendo a comunidade.
>


Creio que todos estes campos sejam numéricos e portanto devem ser
armazenados como números (inteiro ou decimal de precisão arbitrária).

Algumas vezes que li a justificativa de se utilizar strings me pareceu
que havia uma grande confusão entre formato de armazenamento e formato
de exibição. Por ex. como o CPF normalmente é exibido na forma:
99.999.999-99 julgava-se que seria melhor já armazena-lo dessa forma,
contudo a função to_char permite formatar números no formato que
quiser.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Consulta complicada

2015-07-28 Por tôpico Osvaldo Kussama
Em 27/07/15, Stclarastcl...@gmail.com escreveu:
 Salve, galera.
 Gostaria de saber se alguém já recebeu um pedido destes e como conseguiu
 resolver:
 - Uma tabela com os campos nome e cores;
 - Ex:
 nome   cores
 carlos   azul, vermelho, amarelo
 josé   branco, cinza, azul
 antonioamarelo, azul, roxo

 - Agora preciso montar uma consulta que me retorne:

 azulvermelhoamarelo  branco cinza roxo
 carlos   carlos carlos  josé joséantonio
 josé  antonio
 antonio


 Isto é possível ?



Verifique se a função crosstab do módulo tablefunc atende a suas necessidades.

http://www.postgresql.org/docs/current/interactive/tablefunc.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] dificuldade com replace

2015-07-05 Por tôpico Osvaldo Kussama
2015-07-05 17:09 GMT-03:00, Douglas Fabiano Specht douglasfabi...@gmail.com:
 pessoal,
 utilizo o PostgreSQL 9.4.0 on x86_64-unknown-linux-gnu, compiled by gcc
 (Debian 4.7.2-5) 4.7.2, 64-bit,

 tenho um campo character varying em que grava um codigo html, ocorre que
 esse codigo vem com caracteres especiais, mas nao consigo fazer um replace
 simples, vejam o resultado abaixo do comando com replace, alguma outra
 idéia?

 select replace(resultado,'?', ''),resultado from mensagemdetalhe
 order by id desc

 replace resultado
 font face=arial size=3 color=blueEnviada com sucesso font face=arial
 size=3 color=blueEnviada com sucesso
 font face=arial size=3 color=blueEnviada com sucesso font face=arial
 size=3 color=blueEnviada com sucesso
 font face=arial size=3 color=redFormato de Celular Inv?lido font
 face=arial size=3 color=redFormato de Celular Inv?lido
 font face=arial size=3 color=redFormato de Celular Inv?lido font
 face=arial size=3 color=redFormato de Celular Inv?lido
 font face=arial size=3 color=redFormato de Celular Inv?lido font
 face=arial size=3 color=redFormato de Celular Inv?lido
 font face=arial size=3 color=redFormato de Celular Inv?lido font
 face=arial size=3 color=redFormato de Celular Inv?lido



Não é mais fácil você utilizar o encoding correto?
Verifique se as configurações são compatíveis:
SHOW SERVER_ENCODING;
SHOW CLIENT_ENCODING;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] dificuldade com replace

2015-07-05 Por tôpico Osvaldo Kussama
Em 05/07/15, Douglas Fabiano Spechtdouglasfabi...@gmail.com escreveu:
 Em 5 de julho de 2015 18:09, Osvaldo Kussama osvaldo.kuss...@gmail.com
 escreveu:

 2015-07-05 17:09 GMT-03:00, Douglas Fabiano Specht 
 douglasfabi...@gmail.com:
  pessoal,
  utilizo o PostgreSQL 9.4.0 on x86_64-unknown-linux-gnu, compiled by gcc
  (Debian 4.7.2-5) 4.7.2, 64-bit,
 
  tenho um campo character varying em que grava um codigo html, ocorre
  que
  esse codigo vem com caracteres especiais, mas nao consigo fazer um
 replace
  simples, vejam o resultado abaixo do comando com replace, alguma outra
  idéia?
 
  select replace(resultado,'?', ''),resultado from mensagemdetalhe
  order by id desc
 
  replace resultado
  font face=arial size=3 color=blueEnviada com sucesso font
 face=arial
  size=3 color=blueEnviada com sucesso
  font face=arial size=3 color=blueEnviada com sucesso font
 face=arial
  size=3 color=blueEnviada com sucesso
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
 


 Não é mais fácil você utilizar o encoding correto?
 Verifique se as configurações são compatíveis:
 SHOW SERVER_ENCODING;
 SHOW CLIENT_ENCODING;

 Osvaldo
 ___

 ambos retornam UTF8


Provavelmente o caractere ? esteja representando um conteúdo não
representável que não é o próprio caractere '?'.
Você tem como garantir que este HTML foi gerado em UTF8?

Tente dar o replace copiando o caractere da origem do HTML.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] dificuldade com replace

2015-07-05 Por tôpico Osvaldo Kussama
Em 05/07/15, Osvaldo Kussamaosvaldo.kuss...@gmail.com escreveu:
 Em 05/07/15, Douglas Fabiano Spechtdouglasfabi...@gmail.com escreveu:
 Em 5 de julho de 2015 18:09, Osvaldo Kussama osvaldo.kuss...@gmail.com
 escreveu:

 2015-07-05 17:09 GMT-03:00, Douglas Fabiano Specht 
 douglasfabi...@gmail.com:
  pessoal,
  utilizo o PostgreSQL 9.4.0 on x86_64-unknown-linux-gnu, compiled by
  gcc
  (Debian 4.7.2-5) 4.7.2, 64-bit,
 
  tenho um campo character varying em que grava um codigo html, ocorre
  que
  esse codigo vem com caracteres especiais, mas nao consigo fazer um
 replace
  simples, vejam o resultado abaixo do comando com replace, alguma outra
  idéia?
 
  select replace(resultado,'?', ''),resultado from mensagemdetalhe
  order by id desc
 
  replace resultado
  font face=arial size=3 color=blueEnviada com sucesso font
 face=arial
  size=3 color=blueEnviada com sucesso
  font face=arial size=3 color=blueEnviada com sucesso font
 face=arial
  size=3 color=blueEnviada com sucesso
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
  font face=arial size=3 color=redFormato de Celular Inv?lido font
  face=arial size=3 color=redFormato de Celular Inv?lido
 



Tente:

select regexp_replace(resultado,'Inv.lido', 'Invalido'), resultado
from mensagemdetalhe
order by id desc;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Forma alternativa/otimizada de fazer um select

2015-06-17 Por tôpico Osvaldo Kussama
Em 17/06/15, Luciano Bierhalsbierh...@gmail.com escreveu:
 Pessoal,

 Assumindo meus limitados conhecimentos, tenho uma dúvida e gostaria de um
 auxílio do grupo.

 Vamos a dúvida:

 CREATE TABLE registros
 (
 ID INTEGER NOT NULL,
 tipo INTEGER NOT NULL,
 data DATE NOT NULL,
 capacidade SMALLINT NOT NULL
 -- outras diversas colunas que não fazem diferença para o entendimento do
 problema
 );

 O campo ID é a PK.

 Para fazer um select que retorne todos os dados do registro, mas apenas o
 de maior data, atualmente faço isso:

 Select r1.*
 from registros r1
 join (select max(data) as data, tipo
   from registro
  group by tipo) r2 on r1.tipo = r2.tipo and r1.data = r2.data


 Pergunto: Existe alguma forma melhor (mais otimizada ou de melhor escrita)
 para fazer essa consulta? Ou esta é a única forma?



Me parece mais simples:

SELECT * FROM registros WHERE data = (SELECT max(data) FROM registros);

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Array de elementos que não estão contidos

2015-06-10 Por tôpico Osvaldo Kussama
Em 10/06/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Postgresql tem alguma saída pronta, de gerar um array de elementos que
 não estão contidos. Exemplo:

 array_algumacoisa(array[2,5,8,4,1], array[5,1,2])

 retorno: {4,8}

 Olhei na DOC e não vi nada a respeito, mas como essa DOC sempre me prega
 peças,



Apenas para definir melhor o problema.
Qual seria o resultado esperado de:
array_algumacoisa(array[2,5,8,4,1], array[5,1,7]) ?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Array de elementos que não estão contidos

2015-06-10 Por tôpico Osvaldo Kussama
Em 10/06/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Apenas para definir melhor o problema.
 Qual seria o resultado esperado de:
 array_algumacoisa(array[2,5,8,4,1], array[5,1,7]) ?


 {2,8,4,7} --A ordem não importa

 Em 10 de junho de 2015 18:38, Osvaldo Kussama osvaldo.kuss...@gmail.com
 escreveu:

 Em 10/06/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
  Postgresql tem alguma saída pronta, de gerar um array de elementos
  que
  não estão contidos. Exemplo:
 
  array_algumacoisa(array[2,5,8,4,1], array[5,1,2])
 
  retorno: {4,8}
 
  Olhei na DOC e não vi nada a respeito, mas como essa DOC sempre me
  prega
  peças,
 


 Apenas para definir melhor o problema.
 Qual seria o resultado esperado de:
 array_algumacoisa(array[2,5,8,4,1], array[5,1,7]) ?


Eu só queria explicitar o que você entende por contido.
Na realidade você deseja todos os elementos fora da intersecção?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select muitos para um

2015-05-24 Por tôpico Osvaldo Kussama
Em 24/05/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Existe uma tabela chamada GAME:

 GAME
 ---
 codbar_game varchar(14) PK,
 nome_game varchar(50),
 genero_game varchar(30),
 status_game boolean

 Cada game pode ter vários idiomas de áudio:

 AUDIO
 
 id_audio SERIAL PK,
 nome_idioma varchar(30)


 AUDIOGAME
 --
 codbar_game varchar(14) PK FK,
 id_audio integer PK FK


 Cada game também pode ter vários idiomas de legenda:

 LEGENDA
 ---
 id_legenda SERIAL PK,
 nome_legenda varchar(30)


 LEGENGAME
 ---
 codbar_game varchar(14) PK FK,
 id_legenda integer PK FK


 Estou pensando em um select onde eu possa trazer todos os dados de um
 determinado game junto com as legendas e áudios dele, exemplo:


 codbar_game | nome_game | genero_game | status_game | legendas_game |
 audios_game
 0001 God of War Ação  TRUE
 legendasaudios


 A ideia é não repetir o jogo para mostrar os áudios e as legendas que
 ele tem, ou seja, eu não desejo isso:

 codbar_game | nome_game | genero_game | status_game | legendas_game |
 audios_game
 0001 God of War Ação  TRUE pt_BR
  pt_BR
 0001 God of War Ação  TRUE en_US
 en_US

 Ao invés disso o select poderia retornar as legendas e os audios do game
 em forma de listas de varchar, assim o programador pode extrair o
 conteúdo dessa lista e exibir graficamente como achar melhor. Aceito
 outras sugestões.
 ___


Utilize a cláusula GROUP BY codbar_game e a função de agregação
array_agg ou string_agg.

http://www.postgresql.org/docs/current/interactive/functions-aggregate.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select JOIN e COUNT

2015-05-17 Por tôpico Osvaldo Kussama
Em 17/05/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Tenho as seguintes tabelas:

 QUARTO
 
 numero_quarto varchar(5) PK NOT NULL,
 tipo_quarto integer FK NOT NULL,
 valor_quarto numeric(7,2) NOT NULL,
 capacidade_quarto integer NOT NILL


 TIPOSQUARTO
 
 id_tipoquarto SERIAL PK NOT NULL,
 descricao_tipoquarto varchar(30)


 FRIGOBARS
 
 quarto_frigobar FK PK NOT NULL, --(FK  QUARTOS)
 produto_frigobar FK PK NOT NULL,   --(FK  PRODUTOS)
 quantidade_frigobar integer NOT NULL



 PRODUTO
 --
 id_produto SERIAL PK NOT NULL,
 descricao_produto varchar(50) NOT NULL,
 valor_produto numeric(7,2)



 Preciso fazer uma consulta que me traga:

 numero_quarto | descricao_tipoquarto | valor_quarto | capacidade_quarto
 | frigobar
  1  Luxo 100,003
  'COM'
  2  Simples 80,00
2'SEM'

 Minha dificuldade está na coluna frigobar. Pela lógica, eu sei o que
 deve ser feito. Deve-se procurar na tabela frigobar se existe um
 registro para o número do quarto em questão.
 Se houver retornar a palavra 'COM', caso contrário retornar 'SEM'. Porém
 não sei como montar o SQL para esse caso.
 Existe o SELECT CASE, mas não encontrei um jeito de colocar tudo em uma
 só query.
 Eu consigo trazer uma parte com o trivial JOIN:

 SELECT
  QUARTOS.numero_quarto,
  TIPOSQUARTO.descricao_tipoquarto,
  QUARTOS.valor_quarto,
  QUARTOS.capacidade_quarto
 FROM
  QUARTOS
 JOIN
  TIPOSQUARTO ON QUARTOS.tipo_quarto =
 TIPOSQUARTO.id_tipoquarto;

 Mas não achei uma maneira de fazer o lance do frigobar.

 Eu também precisaria criar um select que me retornasse quantos quartos
 existem de cada tipo, também sei a lógica, (procurar na tabela QUARTOS
 quantos são do tipo 1, 2, 3, ).
 Isso pode ser feito com COUNT() + WHERE, mas eu preciso uma query que
 retorne.

 descricao_tipoquarto | COUNT()
  Luxo10
  Simples   20

 Grato!
 ___


Faça um LEFT OUTER JOIN com a tabela FRIGOBARS e teste, no resultado,
se algum de seus campos é NULL, caso em que não tem frigobar.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select JOIN e COUNT

2015-05-17 Por tôpico Osvaldo Kussama
Em 17/05/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 On 17/05/2015 14:12, Osvaldo Kussama wrote:
 Em 17/05/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:

 Faça um LEFT OUTER JOIN com a tabela FRIGOBARS e teste, no resultado,
 se algum de seus campos é NULL, caso em que não tem frigobar.

 Osvaldo

 Entendo, mas eu quero que o próprio SQL já me retorne nesse formato

 numero_quarto | descricao_tipoquarto | valor_quarto |
 capacidade_quarto|frigobar
   1 Luxo 100,00  3
 'COM'
   2 Simples  80,00   2
 'SEM'

 Ou seja, já me retorna com a string 'COM' ou 'SEM', sei que o SELECT CASE
 faz isso:

 SELECT CASE WHEN
  quarto_frigobar = numero_quarto
 THEN
  'COM'
 ELSE
  'SEM'
 END FROM
 FRIGOBARS;

 Mas eu não sei como deixar isso tudo no mesmo select, ou seja, para cada
 QUARTO deve ser verificado se existe um registro em FRIGOBARS

 ___



SELECT
QUARTOS.numero_quarto,
TIPOSQUARTO.descricao_tipoquarto,
QUARTOS.valor_quarto,
QUARTOS.capacidade_quarto,
CASE WHEN FRIGOBARS.quarto_frigobar IS NOT NULL
THEN 'COM'
ELSE 'SEM'
END AS frigobar
FROM
QUARTOS
JOIN
TIPOSQUARTO ON QUARTOS.tipo_quarto = TIPOSQUARTO.id_tipoquarto
LEFT OUTER JOIN
FRIGOBARS ON QUARTOS.numero_quarto = 
FRIGOBARS.quarto_frigobar;



SELECT TIPOSQUARTO.descricao_tipoquarto, count(QUARTO.numero_quarto)
FROM TIPOSQUARTO INNER JOIN QUARTO ON QUARTO.tipo_quarto =
TIPOSQUARTO.id_tipoquarto
GROUP BY TIPOSQUARTO.descricao_tipoquarto;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] bigint e bigserial, quando usar?

2015-03-24 Por tôpico Osvaldo Kussama
Em 24/03/15, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 No meu ponto de vista bigint e bigserial são necessários quando, por
 exemplo, temos uma chave artificial que pode crescer de forma mais
 rápida que o normal.
 Além desse caso, quais seriam os outros casos em que eles são uteis?

 Aproveitando esse tema, alguém aqui na comunidade já atingiu o limite do
 integer com chaves artificiais? O que acontece e o que fazer?



Depende de como foi criada a SEQUENCE, particularmente a opção CYCLE / NO CYCLE:


The CYCLE option allows the sequence to wrap around when the
maxvalue or minvalue has been reached by an ascending or descending
sequence respectively. If the limit is reached, the next number
generated will be the minvalue or maxvalue, respectively.

If NO CYCLE is specified, any calls to nextval after the sequence
has reached its maximum value will return an error. If neither CYCLE
or NO CYCLE are specified, NO CYCLE is the default.

http://www.postgresql.org/docs/current/interactive/sql-createsequence.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] função que retorna diferença de horas entre um periodo

2015-02-13 Por tôpico Osvaldo Kussama
Em 13/02/15, Pedro B. Alvespedroalve...@gmail.com escreveu:
 Pessoal, existe algo no PostgreSQL, que retorna a diferença em horas, entre
 duas datas?



SELECT (EXTRACT(EPOCH FROM '2015-02-13 17:00:00'::TIMESTAMP) -
EXTRACT(EPOCH FROM '2015-01-10 08:00:00'::TIMESTAMP)) / 3600;

http://www.postgresql.org/docs/current/interactive/functions-datetime.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] RES: RES: RES: RES: RES: Replicação horizontal de tabelas

2015-01-19 Por tôpico Osvaldo Kussama
Em 19/01/15, Márcio A. Seppmar...@zyontecnologia.com.br escreveu:


 O que você quer dizer com date é um tipo de dados composto?
 Um campo date é um inteiro que contém o número de dias decorridos a partir
 de 2000-01-01.
 Ao declarar como date o PostgreSQL faz as devidas conversões.


 Eu li no artigo sugerido no início desta discussão que o autor utilizava o
 ano como sendo a chave e gravava como smallint no banco. Minha dúvida é se
 eu, utilizando o campo date, teria a mesma performance do que utilizar um
 campo inteiro?

 (se a performance é semelhante, me pergunto pq o autor deste bom material
 preferiu utilizar um campo smallint ao invés de um campo date e deixando o
 SQL mais complexo - pois há a necessidade de adicionar um extract na
 cláusula para o planejador entender em qual fragmento da tabela ele deve
 percorrer).




Certamente a performance será melhor com o uso direto do campo (no
caso o smallint) do que com uma função sobre o campo (no caso uma
função que extraia o ano do campo date).

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] RES: RES: RES: RES: Replicação horizontal de tabelas

2015-01-19 Por tôpico Osvaldo Kussama
Em 15/01/15, Márcio A. Seppmar...@zyontecnologia.com.br escreveu:

 Não tem problema. É só você criar a sua CHECK CONSTRAINT de acordo. Mas
 veja, as suas cláusulas WHERE tem que bater com o que você colocar lá, senão
 o postgres vai sempre varrer todas as partições.



 Eu achei mais prático trabalhar com o tipo date do que em todo o SQL fazer a
 conversão (extract (year from data_pedido)) conforme sugerida no artigo para
 separar por ano.

 Só fiquei intrigado pelo fato de que o date é um tipo de dados composto e
 talvez isso poderia acarretar algum problema de performance. Vcs tem usado o
 campo date como chave da partição?




O que você quer dizer com date é um tipo de dados composto?
Um campo date é um inteiro que contém o número de dias decorridos a
partir de 2000-01-01.
Ao declarar como date o PostgreSQL faz as devidas conversões.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] problema ao executar uma funcão

2015-01-12 Por tôpico Osvaldo Kussama
2015-01-12 23:45 GMT-02:00, Douglas Fabiano Specht douglasfabi...@gmail.com:
 Boa noite Pessoal,

 tenho uma função bem simples, mas ao tentar executar diz que nao existe,
 alguem pode me dizer o que estou fazendo errado?

 CREATE OR REPLACE FUNCTION get_nova_mensagem(_idexterno integer, _idempresa
 integer, _mensagem text, _telefone text, _tipopessoa integer, _dtregistro
 timestamp without time zone, _status integer)  RETURNS bigint AS
 $BODY$
   DECLARE
   _idmensagem integer;
   BEGIN
   INSERT INTO mensagem(idexterno, idempresa, mensagem, telefone,
 tipopessoa, dtregistro, status)
 VALUES (_idexterno, _idempresa, _mensagem, _telefone, _tipopessoa,
 _dtregistro, _status) RETURNING id INTO STRICT _idmensagem;
   RETURN _idmensagem;
   END;
   $BODY$
   LANGUAGE plpgsql VOLATILE
   COST 100;
 ALTER FUNCTION get_nova_mensagem(integer, integer, text, text, integer,
 timestamp without time zone, integer)
   OWNER TO dk;

 executo o comando: SELECT * FROM get_nova_mensagem(1, 1, 'teste',
 '990', 1, now(), 0);


 ERROR:  function get_nova_mensagem(integer, integer, unknown, unknown,
 integer, timestamp with time zone, integer) does not exist
 LINE 1: SELECT * FROM get_nova_mensagem(1, 1, '', '', 1, now(), 0);
   ^
 HINT:  No function matches the given name and argument types. You might
 need to add explicit type casts.
 ** Error **

 ERROR: function get_nova_mensagem(integer, integer, unknown, unknown,
 integer, timestamp with time zone, integer) does not exist
 SQL state: 42883
 Hint: No function matches the given name and argument types. You might need
 to add explicit type casts.
 Character: 15





Atente para a definição da função (timestamp without time zone) e para
a chamada (timestamp with time zone).

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida com Enconding

2015-01-10 Por tôpico Osvaldo Kussama
Em 10/01/15, Vinicius Santosvinicius.santos.li...@gmail.com escreveu:
 Em 10 de janeiro de 2015 09:34, Vinicius Santos 
 vinicius.santos.li...@gmail.com escreveu:

 Bom dia pessoal,

 Criei um banco de dados herdando de template0 usando a codificação
 WIN1252.

 Tenho um arquivo txt codificado em ANSI, e ao tentar importá-lo com COPY,
 tenho o seguinte:

 ERRO:  sequência de bytes é inválida para codificação UTF8: 0xc74f
 HINT:  Este erro pode acontecer também se a sequência de bytes não
 corresponde a codificação esperado pelo servidor, que é controlada por
 client_encoding.
 CONTEXT:  COPY arquivo, linha 48919

 Minha dúvida é a seguinte: Porque a mensagem diz UTF8?? Meu banco é
 Win1252, não UTF8.

 PostgreSQL 8.4.12 no Windows.


 Apenas pra constar.

 Fiz o mesmo usando encoding SQL_ASCII e funcionou.


Isto significa que não é para fazer nenhuma verificação sobre a
codificação utilizada.
Não deve ser utilizado.
Se você utilizar diferentes clientes com diferentes codificações para
alimentar o banco você terá que saber exatamente qual codificação cada
cliente utilizou para recuperar corretamente os dados do banco.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida com Enconding

2015-01-10 Por tôpico Osvaldo Kussama
Em 10/01/15, Osvaldo Kussamaosvaldo.kuss...@gmail.com escreveu:

Complementando, veja:
http://www.postgresql.org/docs/9.4/static/charset.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida com Enconding

2015-01-10 Por tôpico Osvaldo Kussama
Em 10/01/15, Vinicius Santosvinicius.santos.li...@gmail.com escreveu:
 Bom dia pessoal,

 Criei um banco de dados herdando de template0 usando a codificação WIN1252.

 Tenho um arquivo txt codificado em ANSI, e ao tentar importá-lo com COPY,
 tenho o seguinte:

 ERRO:  sequência de bytes é inválida para codificação UTF8: 0xc74f
 HINT:  Este erro pode acontecer também se a sequência de bytes não
 corresponde a codificação esperado pelo servidor, que é controlada por
 client_encoding.
 CONTEXT:  COPY arquivo, linha 48919

 Minha dúvida é a seguinte: Porque a mensagem diz UTF8?? Meu banco é
 Win1252, não UTF8.

 PostgreSQL 8.4.12 no Windows.



Você tem que verificar o que está declarado tanto do lado do cliente
quanto do lado do servidor e assegurar que os dados estejam
compatíveis com as declarações.

SHOW CLIENT_ENCODING;
SHOW SERVER_ENCODING;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com Função

2014-12-16 Por tôpico Osvaldo Kussama
Em 16/12/14, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Em Ter, 2014-12-16 às 17:56 -0200, Matheus de Oliveira escreveu:

 2014-12-16 17:47 GMT-02:00 Matheus Saraiva
 matheus.sara...@gmail.com:
 Ao usar a seguinte função

 http://paste.ubuntu.com/9543365/

 Estou recebendo um erro, informando que a função atingiu o fim
 e não encontrou um retorno. Não tenho muita experiência com
 PLPGSQL mas acredito que o retorno final está lá (RETURN
 sucess;)


 Aquele RETURN na linha 27 está dentro do bloco de exceções. Mova essa
 linha para antes da EXCEPTION, linha 15.


 Atenciosamente,
 --
 Matheus de Oliveira
 Analista de Banco de Dados
 Dextra Sistemas - MPS.Br nível F!
 www.dextra.com.br/postgres


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

 Ok, deu certo. Esse bloco exception é diferente do que eu imaginava,
 achei quele ele terminasse quando não encontrasse mais clausulas when
 then. Pelo visto ele não tem um delimitador que marque o seu fim.
 --


De:
http://www.postgresql.org/docs/current/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING

If no error occurs, this form of block simply executes all the
statements, and then control passes to the next statement after END.
But if an error occurs within the statements, further processing of
the statements is abandoned, and control passes to the EXCEPTION list.
The list is searched for the first condition matching the error that
occurred. If a match is found, the corresponding handler_statements
are executed, and then control passes to the next statement after
END.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] REF: INFORMAR SINAL DxC.

2014-12-03 Por tôpico Osvaldo Kussama
Em 03/12/14, Paulo Afonso Pereirapa...@visualpsistemas.com.br escreveu:
 OLÁ PESSOAL,



 PRECISO COLOCAR SINAIS NOS MEUS SALDOS E PRECISO DE UMA DICA.

 EXECUTANDO A SENTENÇA ABAIXO:

 SELECT pl.classificacao

  , pl.descricao

  , coalesce(

  (

SELECT sum (lcx.valor)

 FROM consolidado lcx

  WHERE lcx.datalan  '2014-01-01'

  ),0)  AS saldo_anterior;



 RETORNO:

 

 -48071.06

 -25620.64

 -1.00

 -31.15

 -1200.00

 -25000.00

 1200.00

 25000.00

 -2.00

 -20080.00

 2.00



 PRECISO COLOCAR SINAIS DE 'D' PARA NEGATIVOS E 'C' PARA POSITIVOS.

 ESTOU TENTANDO ALGO ASSIM:

 -

 48071.06D

 25620.64D

 1.00D

 31.15D

 1200.00D

 25000.00D

 1200.00C

 25000.00C

 2.00D

 20080.00D

 2.00C



 ESTOU TENTADO ALGO DO TIPO:

 ---

 SELECT pl. classificacao

  , pl.descricao

  , coalesce(

  (

SELECT

 CASE WHEN sum (lcx.valor)  0 THEN ABS(sum
 (lcx.valor))||'D'

WHEN sum (lcx.valor)  0 THEN ABS(sum
 (lcx.valor))||'C'

   ELSE '*'

END

 FROM consolidado lcx

  WHERE lcx.datalan  '2014-01-01'

  ),0)  AS saldo_inicial



 RETORNA O ERRO:

 ---

 ERRO:  tipos no COALESCE text e integer não podem corresponder

 LINE 22:),0)  AS saldo_inicial



Tente formatar o valor com sinal ao final.
to_char(campo, '9.99SG')
e depois troque o +/- por C/D:
translate(to_char(campo, '9.99SG'), '+-', 'CD')

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select retornando coluna com total de registros

2014-11-28 Por tôpico Osvaldo Kussama
Em 28/11/14, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
 Pessoal,

 Tenho um select que traz as colunas cliente e código da entrega, os
 registros são ordenados por cliente, é possível nesse mesmo select trazer o
 total de registros referentes ao cliente? Algo como:

 CLIENTE A | 1
 CLIENTE A | 2
 CLIENTE A | 3
 CLIENTE B | 4
 CLIENTE C | 6
 CLIENTE C | 7

 Queria que em uma terceira coluna retornasse a quantidade de registros, que
 no caso do CLIENTE A seria 3, CLIENTE B 1 e CLIENTE C 2, ficando algo como:


 CLIENTE A | 1 | 3
 CLIENTE A | 2 | 3
 CLIENTE A | 3 | 3
 CLIENTE B | 4 | 1
 CLIENTE C | 6 | 2
 CLIENTE C | 7 | 2

 Se eu utilizar um COUNT, serei obrigado a efetuar um GROUP BY, mas não
 serviria para o meu caso.



Ou use um subselect com o count(*) daquele cliente ou
SELECT c1.cliente, c1.cod_entrega, c2.total FROM tab_cliente c1 INNER
JOIN (SELECT cliente, count(*) AS total FROM tab_cliente GROUP BY
cliente) c2 ON (c1.cliente = c2.cliente);

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Exportar para csv

2014-11-27 Por tôpico Osvaldo Kussama
Em 27/11/14, Aguiar Magalhaesmaga...@yahoo.com.br escreveu:
 Estou usando o postgresql 9.2 e atraves do pgadmin estou tentando executar o
 comando
 copy clientes to 'c:\\teste' delimiters ';'
 Está dando o erro

 ERRO:  não pôde abrir arquivo  para escrita 'c:\\teste': Permission denied
 postgresql
 Verifiquei as permissões e tentei salvar também em meus documentos, mas não
 funcionou


Caso você não esteja rodando na mesma máquina do servidor leve em
consideração que este comando é executado no servidor, e não no
cliente, e talvez o usuário postgres não tenha tais permissões.

Osvaldo
]
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Insert via plsql function

2014-11-12 Por tôpico Osvaldo Kussama
Em 12/11/14, Erison Gmailnos...@gmail.com escreveu:
 Bom dia

 Preciso que o banco autoalimente uma tabela, em função do tempo

 Vou passar a idéia,

 Preciso que quando o dia for letivo (tabela onde esta gravados os dias
 letivo) o sistema lance presença padrão sim para todos os alunos que esteja
 matriculados.

 Os usuários do sistema depois somente informarão as faltas.

 Se alguém tiver uma sugestão, exemplo, idéia agradeço



Creio que o mais simples seja rodar uma rotina no cron, em todos os
dias, e sua rotina verificar se é um dia letivo e em caso positivo
fazer os procedimentos desejados.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SET application_name

2014-11-10 Por tôpico Osvaldo Kussama
Em 10/11/14, Fernando Cambiaghicambia...@gmail.com escreveu:
 Boa tarde Pessoal.

 Estou criando uma função no Banco para alterar o nome da aplicação depois
 de conectado ( Uma gambiarra por não saber fazer isso na string de conexão
 do ODBC ), porém, a função não está executando como deveria ( ou como eu
 gostaria )

 A função executa o comando SET application_name, porém, ao invés de
 atribuir o valor da variável, está atribuindo o nome dela para a aplicação.


 Estou executando: SELECT * FROM set_app_name( 'TL' );

 Resultado:
 SELECT * FROM _stat_activity; = 18849;bd0563;3968;16393;dbo;p_app
 .

 -- Função para alterar o nome da aplicação após conectado ao banco de
 dados.
 CREATE OR REPLACE FUNCTION set_app_name(p_app character varying)
   RETURNS BOOLEAN AS
 $BODY$

 BEGIN
 SET application_name = p_app;

 RETURN TRUE;
 END;
 $BODY$
   LANGUAGE plpgsql;

 Estou fazendo isso porque quero que determinada função não seja executada
 caso a aplicação seja a TL. ( ou algumas outras )

 Já agradeço antecipadamente a ajuda.



Use EXECUTE.
http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Como tratar textos na língua inglesa para importação

2014-10-30 Por tôpico Osvaldo Kussama
Em 30/10/14, Tarcisio Martinsmartins.tarci...@gmail.com escreveu:
 Boa tarde meus caros, estou perdendo muito tempo para realizar uma tarefa
 aparentemente simples, executar uma sequência de updates que atualizam
 uma coluna de texto.

 O detalhe é que o texto está na lingua inglesa. Para melhor entender o
 problema abaixo segue um comando update, que está entre milhares:

 update ofbiz.git_log set commit_message='FIX: In v1340631, a change was
 introduced in a comment; however, that referenced a public static variable,
 it really should have called the public static method introduced in that
 same commit.  This happened because the change wasn't reviewed before it
 was committed.' where
 ofbiz.git_log.hash='0ed338266168f09acf54adafe2366db5508eb4c4';

 Ao observar o texto de atualização do campo commit_message, a palavra
 abreviada wasn't dentre várias outras como I'am que usam single quote,
 atrapalham a execução do update. Consigo resolver isso colocando
 was''not(single quote duas vezes), porém estou com dificuldade na
 substituição, estou usando emacs do linux
 para localizar e substituir, conseguí localizar mas não consigo forma a
 regex de substituição.Por isso peço a ajuda de vocês com outras opções,
 inclusive utilizando
 recursos do postgresql para resolver.

 Uso linux/Centos e postgresql 9.3, collation pt_BR.UTF8.



Considere o uso de Dollar-quoted String.
Item 4.1.2.4. de:
http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Veja o primeiro exemplo: $$Dianne's horse$$

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] ajuda com consulta

2014-10-27 Por tôpico Osvaldo Kussama
Em 27/10/14, Eloi Ribeiroe...@openmailbox.org escreveu:
 Ola a todos da lista,

 Tenho uma tabela com possíveis combinações entre valores, e essas
 combinações repetem-se mas numa ordem distinta. Exemplo:

 5;12842
 5;62409
 5;62410
 12842;5
 12842;62409
 12842;62410
 62409;5
 62409;12842
 62409;62410
 62410;5
 62410;12842
 62410;62409

 Como posso fazer uma consulta para selecionar apenas as combinações
 possíveis?

 5;12842
 5;62409
 5;62410

 Obrigado. Cumprimentos,



Não entendi o resultado desejado.
Por que, por ex., o par (12842, 62410) não faz parte do resultado?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Erro de sintaxe em ou próximo a else

2014-10-21 Por tôpico Osvaldo Kussama
2014-10-21 9:22 GMT-02:00, Hélio Oliveira hpensa...@gmail.com:
 Bom dia Colegas!

 Ao tentar criar uma Function/Trigger dá o erro:

 ERRO:  erro de sintaxe em ou próximo a else
 LINE 18:   else

 e não consigo entender qual o motivo, abaixo a function.

 create or replace function apagar_aiu() returns trigger
 as $$
 declare
   vlr_total numeric(12,2);
   hist varchar(50);
 begin
   if (TG = 'INSERT') then
   begin
 if (new.data_pagamento is not null) then
 begin
   if (new.data_pagamento = new.data_vencimento) then
   begin
 if (new.data_pagamento = new.validade_desconto) then
   vlr_total = new.valor - new.desconto;
 else
   vlr_total = new.valor;
 end if;
   end--- Linha 18 :-@
   else
 vlr_total = new.valor + new.acrescimo;
   end if;
   hist = 'Vlr. ref. pagto. do título '||new.numero_titulo;
   insert into movimento_caixa (data, descricao, valor, d_c, documento)
   values (new.data_pagamento, :hist, :vlr_total, 'D',
 new.numero_titulo);
 end if;
   end
   else
   begin
 if (TG = 'UPDATE') then
 begin
   if (new.data_pagamento  old.data_pagamento) then
   begin
 vlr_total = new.valor + new.acrescimo - new.desconto;
 update movimento_caixa mc
 set mc.data = new.data_pagamento, mc.valor = :vlr_total
 where mc.data = old.data_pagamento
   and mc.documento = new.numero_titulo
   and mc.d_c = 'D';
   end if;
   if (new.valor  old.valor) then
   begin
 vlr_total = new.valor + new.acrescimo - new.desconto;
 update movimento_caixa mc
 set mc.valor = :vlr_total
 where mc.data = old.data_pagamento
   and mc.documento = old.numero_titulo
   and mc.d_c = 'D';
   end if;
   if (new.numero_titulo  old.numero_titulo) then
   begin
 update movimento_caixa mc
 set mc.documento = new.numero_titulo
 where mc.data = old.data_pagamento
   and mc.documento = old.numero_titulo
   and mc.d_c = 'D';
   end if;
 end if;
   end
 end;
 $$ LANGUAGE plpgsql;

 --


Me parece faltar um ; em seus END.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Clonar função CURRENT_DATE para SYSDATE

2014-09-25 Por tôpico Osvaldo Kussama
Em 25/09/14, Emanuel Araújoeac...@gmail.com escreveu:
 Obrigado pelas respostas.

 O propósito é ter maior compatibilidade com o Oracle sim.

 Estou em um projeto para utilizar uma ferramenta de sincronização de dados
 chamada SymmetricDS, onde a mesma fica responsável por replicar dados entre
 databases.  Nesse caso, existem várias tabelas com DEFAULT SYSDATE e isso
 quebra no monento que vou fazer a importação DDL das tabelas.  Essa
 ferramenta é propícia para mim porque sua sincronização é baseada em
 eventos e bem específico para o nosso negócio.

 Realmente precisa ser sem os ().


Avalie se o Postgres Plus Advanced Server da EnterpriseDB atende a
suas necessidades.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Usar Schema sem aspas duplas

2014-09-11 Por tôpico Osvaldo Kussama
Em 10/09/14, Natanael Roberto Rodriguesnr.n...@gmail.com escreveu:
 Boa tarde Pessoal,

 Tenho uma dúvida, creio que seja fácil para quem já tem mais tempo com o
 PostgreSQL.
 É possível usar o Schema no select sem o uso da Aspas Duplas?



Veja as regras em:
http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Index do Banco

2014-08-27 Por tôpico Osvaldo Kussama
2014-08-27 9:41 GMT-03:00, Marcio Ribeiro de Oliveira
marcio.olive...@ifro.edu.br:
 Só aproveitando o gancho, alguém conhece uma ferramenta boa para analise de
 onde preciso adicionar index nas tabelas ? minha versão do postgresql e a
 8.4.17



Você está ciente de que esta versão deixou de ser suportada em Julho/2014?

http://www.postgresql.org/support/versioning/

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Checar se arquivo existe fisicamente

2014-08-26 Por tôpico Osvaldo Kussama
Em 26/08/14, Júlio César Martinijuliomart...@gmail.com escreveu:
 Caros,

 Alguém sabe se existe a possibilidade de via SQL no PostgreSQL 9.x, checar
 se um arquivo existe fisicamente? Por exemplo: em minha tabela possuo o
 caminho onde o arquivo físico está gravado e gostaria de saber se ele
 existe mesmo.

 Caso não dê via SQL, vou precisa escrever um script usando uma linguagem
 Java etc... Só queria ver se tinha como matar na SQL.



Não é bem SQL mas veja as funções específicas do PostgreSQL:
http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-GENFILE

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Duvida em escrita de SQL

2014-08-12 Por tôpico Osvaldo Kussama
2014-08-12 11:05 GMT-03:00, Pedro B. Alves pedroalve...@gmail.com:



 Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de
 cada uma delas, provavelmente o plano será exatamente o mesmo.


 Utilizo a versão 9.3.x

 executei o EXPLAIN..

 SELECT twe.*
  , (SELECT descricao FROM tespecializacoes WHERE idespecializacao =
 twe.idespecializacao) AS especializacao
   FROM tworkflowetapas twe


 Seq Scan on tworkflowetapas twe  (cost=0.00..16.36 rows=14 width=30)
 (actual time=0.040..0.142 rows=14 loops=1)
   SubPlan 1
 -  Seq Scan on tespecializacoes  (cost=0.00..1.09 rows=1 width=218)
 (actual time=0.003..0.004 rows=1 loops=14)
   Filter: (idespecializacao = twe.idespecializacao)
   Rows Removed by Filter: 7
 Total runtime: 0.220 ms




 SELECT twe.*
   FROM tworkflowetapas twe
   LEFT JOIN tespecializacoes esp ON (twe.idespecializacao =
 esp.idespecializacao)


 Seq Scan on tworkflowetapas twe  (cost=0.00..1.14 rows=14 width=30)
 (actual time=0.013..0.016 rows=14 loops=1)
 Total runtime: 0.068 ms



Creio que no segundo SELECT faltou esp.descricao na lista de campos,
senão não haveria necessidade da tabela tespecializacoes (como
concluiu o otimizador).

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] BOOL e BOOLEAN Diferenças

2014-07-22 Por tôpico Osvaldo Kussama
Em 22/07/14, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Em 22-07-2014 17:18, Guimarães Faria Corcete DUTRA, Leandro escreveu:
 2014-07-22 16:01 GMT-03:00 Glauco Torres torres.gla...@gmail.com:
 bool é o alias de boolean
 Em português, o apelido ou sinônimo.



 Achei que fosse algo como:

 bool 0 ou 1
 boolean TRUE ou FALSE

 Para um objeto do tipo bool posso passar 0 e 1 ?


Do manual:
Boolean Data Type

Valid literal values for the true state are:
TRUE
't'
'true'
'y'
'yes'
'on'
'1'

For the false state, the following values can be used:
FALSE
'f'
'false'
'n'
'no'
'off'
'0'

Leading or trailing whitespace is ignored, and case does not matter.
The key words TRUE and FALSE are the preferred (SQL-compliant) usage.

http://www.postgresql.org/docs/current/interactive/datatype-boolean.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Erro ao usar cópia de tipo

2014-07-20 Por tôpico Osvaldo Kussama
Em 20/07/14, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 u, não avia tentado dessa forma, se eu não tivesse usando CAPS
 precisaria a mistura de aspas?


Consulte o manual:
http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Erro ao usar cópia de tipo

2014-07-20 Por tôpico Osvaldo Kussama
Em 20/07/14, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 Em 20-07-2014 18:15, Osvaldo Kussama escreveu:
 Em 20/07/14, Matheus Saraivamatheus.sara...@gmail.com escreveu:
 u, não avia tentado dessa forma, se eu não tivesse usando CAPS
 precisaria a mistura de aspas?

 Consulte o manual:
 http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS


 Pelo que entendi da doc, não era o caps que estava provocando o erro,
 visto que a dica do Euler sobre CAPS é uma convenção.


No caso o pgAdmin insere as aspas automaticamente sempre que considera
necessário. O uso de uma letra maiúscula é uma das condições.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Documentação

2014-07-10 Por tôpico Osvaldo Kussama
Em 10/07/14, Leandro Hamidleandro.ha...@gmail.com escreveu:
 Bom dia a todos.

 Eu gostaria de saber dos demais colegas se ainda posso utilizar para base
 dos meus estudos o material traduzido para o português brasileiro tendo em
 vista que este mesmo material foi gerado tendo como apoio a versão 8.0.0 da
 ferramenta. Desde já agradeço.



Sim, pode utilizar.
Apenas considere que esta é uma versão de 2005 e que muita coisa, e
bota muita coisa nisto, foi implementada em versões posteriores a essa
e portanto não constam desta documentação.

Utilize esta documentação em conjunto com:
http://www.postgresql.org/docs/current/interactive/index.html
que obterá bons resultados.

Para saber o que foi implementado consulte:
http://www.postgresql.org/docs/current/interactive/release.html
de E.167 até E.1

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Documentação

2014-07-10 Por tôpico Osvaldo Kussama
Em 10/07/14, Leandro Hamidleandro.ha...@gmail.com escreveu:
 Boa noite Osvaldo.

 Gostaria de agradecer pela ajuda, muito obrigado mesmo!

 

 Leandro Diniz
 SERPRO - Serviço Federal de Processamento de Dados
 Maito: leandro.ha...@gmail.com
 Maito: leandro.ha...@linuxmail.org
 http://www.serpro.gov.br
 GNU/Linux User #485051
 --- The blue screen of the death ---

 Enviado via Android
 Em 10/07/2014 18:32, Osvaldo Kussama osvaldo.kuss...@gmail.com
 escreveu:

 Em 10/07/14, Leandro Hamidleandro.ha...@gmail.com escreveu:
  Bom dia a todos.
 
  Eu gostaria de saber dos demais colegas se ainda posso utilizar para
  base
  dos meus estudos o material traduzido para o português brasileiro tendo
 em
  vista que este mesmo material foi gerado tendo como apoio a versão
  8.0.0
 da
  ferramenta. Desde já agradeço.
 


 Sim, pode utilizar.
 Apenas considere que esta é uma versão de 2005 e que muita coisa, e
 bota muita coisa nisto, foi implementada em versões posteriores a essa
 e portanto não constam desta documentação.

 Utilize esta documentação em conjunto com:
 http://www.postgresql.org/docs/current/interactive/index.html
 que obterá bons resultados.

 Para saber o que foi implementado consulte:
 http://www.postgresql.org/docs/current/interactive/release.html
 de E.167 até E.1



Apenas para complementar:
Existe uma parte traduzida do manual da versão 8.2. Veja:
http://pgdocptbr.sourceforge.net/

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Quebra de string

2014-07-01 Por tôpico Osvaldo Kussama
Em 01/07/14, Deliane Andradedeliane.andr...@gmail.com escreveu:
 Boa tarde!

 Tenho um campo do tipo string que está armazenado da seguinte forma:
 {51|15057267||5911898||563507-1827|1|1|14||,51|15057267||5911898||563737-1827|1|1|14||,51|15057267||5911898||563768-1827|1|1|26||,51|15057267||5911898||563564-1827|1|1|26||,51|15057267||5911898||563617-1827|1|1|26||,51|15057267||5911898||563721-1827|1|1|14||,51|15057267||5911898||563093-1827|1|1|26||,51|15057267||5911898||563092-1827|1|1|12|26|,51|15057267||5911898||563722-1827|1|1|14||,51|15057267||5911898||586654-1827|1|1|26||,51|15057267||5911898||563369-1827|1|1|26||,51|15057267||5911898||585761-1827|1|1|26||,51|15057267||5911898||563080-1827|1|1|26||,51|15057267||5911898||563094-1827|1|1|26||}

 Eu preciso quebrar essa string a cada vírgula (e sem as chaves também)  com
 quebra de linha ,de forma que fique assim:

 51|15057267||5911898||563507-1827|1|1|14||
 51|15057267||5911898||563737-1827|1|1|14||
 51|15057267||5911898||563768-1827|1|1|26||
 51|15057267||5911898||563564-1827|1|1|26||
 51|15057267||5911898||563617-1827|1|1|26||
 51|15057267||5911898||563721-1827|1|1|14||
 51|15057267||5911898||563093-1827|1|1|26||
 51|15057267||5911898||563092-1827|1|1|12|26|
 51|15057267||5911898||563722-1827|1|1|14||
 51|15057267||5911898||586654-1827|1|1|26||
 51|15057267||5911898||563369-1827|1|1|26||
 51|15057267||5911898||585761-1827|1|1|26||
 51|15057267||5911898||563080-1827|1|1|26||
 51|15057267||5911898||563094-1827|1|1|26||

 Ele deverá ficar armazenado desta forma em um único campo text.
 Tem como?
 Já tentei várias  funções que trabalham com string,mas não consegui.
 Alguém já fez algo do tipo?



SELECT 
regexp_replace(regexp_replace('{51|15057267||5911898||563507-1827|1|1|14||,51|15057267||5911898||563737-1827|1|1|14||,51|15057267||5911898||563768-1827|1|1|26||,51|15057267||5911898||563564-1827|1|1|26||,51|15057267||5911898||563617-1827|1|1|26||,51|15057267||5911898||563721-1827|1|1|14||,51|15057267||5911898||563093-1827|1|1|26||,51|15057267||5911898||563092-1827|1|1|12|26|,51|15057267||5911898||563722-1827|1|1|14||,51|15057267||5911898||586654-1827|1|1|26||,51|15057267||5911898||563369-1827|1|1|26||,51|15057267||5911898||585761-1827|1|1|26||,51|15057267||5911898||563080-1827|1|1|26||,51|15057267||5911898||563094-1827|1|1|26||}',
',', E'\n', 'g'), '[{}]', '', 'g');
  regexp_replace
--
 51|15057267||5911898||563507-1827|1|1|14||  +
 51|15057267||5911898||563737-1827|1|1|14||  +
 51|15057267||5911898||563768-1827|1|1|26||  +
 51|15057267||5911898||563564-1827|1|1|26||  +
 51|15057267||5911898||563617-1827|1|1|26||  +
 51|15057267||5911898||563721-1827|1|1|14||  +
 51|15057267||5911898||563093-1827|1|1|26||  +
 51|15057267||5911898||563092-1827|1|1|12|26|+
 51|15057267||5911898||563722-1827|1|1|14||  +
 51|15057267||5911898||586654-1827|1|1|26||  +
 51|15057267||5911898||563369-1827|1|1|26||  +
 51|15057267||5911898||585761-1827|1|1|26||  +
 51|15057267||5911898||563080-1827|1|1|26||  +
 51|15057267||5911898||563094-1827|1|1|26||
(1 row)

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Exibir mensagens em português

2014-06-14 Por tôpico Osvaldo Kussama
Em 14/06/14, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
 Pessoal,

 As mensagens de erro (de querie por exemplo) estão vindo em inglês, existe
 a possibilidade de traduzir essas mensagens para o português?



Veja LC_MESSAGES
http://www.postgresql.org/docs/current/interactive/locale.html
http://www.postgresql.org/docs/current/interactive/runtime-config-client.html#RUNTIME-CONFIG-CLIENT-FORMAT

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] REF: Sentenca SQL não retorna dados corretamente.

2014-06-05 Por tôpico Osvaldo Kussama
Em 05/06/14, Paulo Pereirapa...@visualpsistemas.com.br escreveu:

 Ola Pessoal,

 Preciso emitir uma lista de clientes ausentes nas reunioes.
 A sentença abaixo retorna exatamente o pessoal ausente:

 SELECT id_cliente,id_setor,data_cad FROM cliente t1 WHERE NOT EXISTS
 (SELECT 1 FROM reuniao t2 WHERE t1.id_cliente = t2.id_cliente and
 t2.controle_reuniao = 3)

 Porem, preciso filtrar pela data cadastro e ocorre que nao esta
 obedecendo retornando todos os clientes.

 SELECT id_cliente,id_setor,data_cad FROM cliente t1 WHERE NOT EXISTS
 (SELECT 1 FROM reuniao t2 WHERE t1.id_cliente = t2.id_cliente and
 t2.controle_reuniao = 3 and t1.data_cad between '2014-01-01' and
 '2014-12-31')

 Alguem pode dar uma dica ?



Esta cláusula:
and t1.data_cad between '2014-01-01' and '2014-12-31'
deve realmente estar no subselect?
Não me parece estar correlacionada à tabela reuniao e sim à cliente.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Carga de dados lenta

2014-06-03 Por tôpico Osvaldo Kussama
Em 03/06/14, André Geraldo dos Santosandresanto...@gmail.com escreveu:

 O Data Transfer é uma aplicação que eu desenvolvi em delphi para coletar os
 dados do SGBD de origem e inserir no SGBD de destino.
 --


Como você faz o controle de transações em sua aplicação?
Uma transação por insert ou uma única transação para todos os inserts
ou bloco de inserts?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SUM com JOIN somando apenas um registro da tabela origem

2014-05-27 Por tôpico Osvaldo Kussama
Em 27/05/14, Thiagozan...@farmaponte.com.br escreveu:
 Pessoal, boa tarde.

 Desculpe pelo título mas não sabia como descrever o problema em um título.

 Seguinte, tenho as seguintes tabelas.

 tb_vendas
 filial data   ecf coo subtotal desconto
 1  27/05/2014 1   1   10   0

 tb_vendas_produtos

 filial data   ecf coo produto subtotal desconto
 1  27/05/2014 1   1   1   5   0
 1  27/05/2014 1   1   2   5   0

 Preciso fazer uma consulta cruzando as duas tabelas para me trazer o
 total do cabeçalho e dos itens, para saber qual cabeçalho está com valor
 diferente da soma dos itens.

 select
a.filial,
a.data,
a.ecf,
sum(a.subtotal - a.desconto) as valor_venda,
sum(b.subtotal - b.desconto) as valor_venda_produtos
 from tb_vendas a
 join tb_vendas_produtos b on
a.filial = b.filial and
a.data = b.data and
a.ecf = b.ecf and
a.coo = b.coo
 group by
a.filial,
a.data,
a.ecf

 Nessa consulta teria o seguinte resultado:
 filial data   ecf valor_venda valor_venda_produtos
 1  27/05/2014 1   20  10

 Eu precisaria trazer apenas o total por cupom, da seguinte forma:
 filial data   ecf valor_venda valor_venda_produtos
 1  27/05/2014 1   10  10

 Está duplicando pois estou cruzando com a tabela de produtos.
 Como eu posso obter o resultado desejado sem ter que utilizar subquery?

 Observação: preciso fazer isso em SQL Server, infelizmente, mas acredito
 que aprendendo a fazer no PostgreSQL eu saiba o caminho das pedras para
 fazer no SQL Server.



Creio que não é o caso de uma junção mas sim de uma subconsulta.

SELECT  a.filial, a.data, a.ecf, (a.subtotal - a.desconto) AS
valor_venda, (SELECT sum(b.subtotal - b.desconto) FROM
tb_vendas_produtos b WHERE a.filial = b.filial AND a.data = b.data AND
a.ecf = b.ecf AND a.coo = b.coo GROUP BY b.filial, b.data, b.ecf) AS
valor_venda_produtos FROM tb_vendas a;

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Criar função no postgreSQL

2014-05-21 Por tôpico Osvaldo Kussama
Em 21/05/14, Pedro B. Alvespedroalve...@gmail.com escreveu:
 Bom dia Pessoal.

 Gostaria de um auxilio de vocês, se possivel.

 Preciso criar tipo uma tabela temporária dentro de uma função, para mim
 montar o retorno dela.

 por exemplo:

 ano | mes | pedidos
 2014 | 01 | 0
 2014 | 02 | 5
 2014 | 03 | 0
 2014 | 04 | 2
 2014 | 05 | 0

 nos meses que tem o valor 0 ZERO, não tem registro na tabela de pedidos.
 e eu gostaria de montar uma função que já me retorna-se desta forma.



Se o problema for transformar NULL em 0 utilize a função coalesce.
Se o problema for a existência de ano/mês nos períodos em que não
existe pedidos então utilize LEFT OUTER JOIN com uma tabela de
ano/mês.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda executar vários updates

2014-05-13 Por tôpico Osvaldo Kussama
Em 13/05/14, Thiago Haroldothi...@sedcontabilidade.com.br escreveu:
 Boa tarde Galera.

 Gostaria de saber como faço para executar 300 updates de uma só vez no
 postgre sql...

 Estou precisando atualizar a minha tabela de funcionários, porem são 300
 updates e não sei realizar este procedimento.



Se cada update atualiza uma coisa diferente em seu banco de dados
então coloque os 300 comandos updates dentro de uma única transação.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Arquivos Pdf e Imagens no PostgreSQL

2014-05-13 Por tôpico Osvaldo Kussama
Em 13/05/14, Cleysson Limalistapostgre...@gmail.com escreveu:
 O  mais recomendado hoje em dia é salvar os arquivos fisicamente na app e
 salvar apenas o seu endereço no banco de dados.


Você poderia justificar o porquê desta alternativa ser a mais recomendada?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Usuário de Backup no PostgreSQL

2014-05-05 Por tôpico Osvaldo Kussama
Em 05/05/14, Emerson Martinsemersonmarti...@gmail.com escreveu:
 Boa tarde pessoal!

 Estou com uma pequena dúvida com relação as versões mais novas do
 PostgreSQL, que é sobre a utilização de um usuário específico para efetuar
 backup.

 Não cheguei a pesquisar ainda sobre isso, mas acredito que colocar o
 usuário e senha em script de backup não é e nem seria legal.

 Alguém ja implementou algo parecido ou chegou a uma solução que não seja
 essa de colocar usuario e senha no script de backup.



Veja:
A variável de ambiente PGPASSWORD
http://www.postgresql.org/docs/current/interactive/libpq-envars.html
ou, de preferência:
.pgpass
http://www.postgresql.org/docs/current/interactive/libpq-pgpass.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Erro estranho autenticação PG_HBA.conf

2014-04-22 Por tôpico Osvaldo Kussama
Em 22/04/14, Luiz Carlos L. Nogueira Jr.lcnogueir...@gmail.com escreveu:
 Pessoal,

 tenho no meu pg_hba.conf a seguinte linha
 hostall all 192.168.254.139/32  md5

 e no meu log sempre aparece a mensagem:

 2014-04-22 15:19:12 BRT [22741]: [1-1] user=[unknown],db=[unknown] LOG:
 connection received: host=192.168.254.139 port=63322
 2014-04-22 15:19:12 BRT [22741]: [2-1] user=postgres,db=postgres FATAL:  no
 pg_hba.conf entry for host 192.168.254.139, user postgres, database
 postgres, SSL off


 É como se ele não estivesse lendo esse pg_hba, pois altero outras regras e
 também não faz nenhum efeito.

 Tentei com pg_ctl reload e service postgrex reload e não funcionou.

 Alguém tem alguma idéia do que pode estar ocorrendo?



port=63322
É isto mesmo? A porta tradicional do PostgreSQL é a 5432.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Base de dados DEF

2014-04-17 Por tôpico Osvaldo Kussama
Já tentou em:
http://www.def.com.br/ ?

Osvaldo


Em 17/04/14, Pedro B. Alvespedroalve...@gmail.com escreveu:
 Bom dia Pessoal,

 Alguém saberia onde posso conseguir uma base de dados com os medicamentos
 chamada (DEF)?

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Encoding

2014-04-17 Por tôpico Osvaldo Kussama
Veja a opção:
-E encoding
--encoding=encoding
do pg_dump.

http://www.postgresql.org/docs/current/interactive/app-pgdump.html

Mais detalhes sobre a questão de idioma você encontra em:
http://www.postgresql.org/docs/current/interactive/charset.html

Osvaldo


Em 17/04/14, Flavio Henrique Araque Gurgelfha...@gmail.com escreveu:
 Tenho uma dúvida que acredito ser básica, hoje possuo uma base de dados
 construida no postgresql da seguinte forma:

 ENCODING = 'WIN1252'
 LC_COLLATE = 'C'
 LC_CTYPE = 'C'

 é possivel criar uma base em:
 ENCODING = 'UTF8'
 LC_COLLATE = 'pt_BR.utf8'
 LC_CTYPE = 'pt_BR.utf8'

 e restaurar a base q esta no formato anterior sem perda de dados ?

 Perfeitamente, mas a recíproca não é verdadeira.
 Cuidado com o comportamento de ORDER BY nas suas aplicações pois pode
 mudar.

 Tenho pouco tempo de estrada relacionado ao postgresql, por isso
 gostaria de dicas para aperfeiçoar meus conhecimentos em postgresql.

 Vá lendo, entendendo, perguntando...

 []s
 Flavio Gurgel
 ___
 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] Base de dados DEF

2014-04-17 Por tôpico Osvaldo Kussama
Em 17/04/14, Pedro B. Alvespedroalve...@gmail.com escreveu:
 Já tentou em:

 http://www.def.com.br/ ?


 Já tentei, só que eles não comercializam a lista.


Mas:
http://epuc.webstorelw.com.br/products/cd-rom-def-2012-slash-13-dicionario-de-especialidades-farmaceuticas
não atende?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] RES: Configuração do PG_HBA.CONF

2014-03-14 Por tôpico Osvaldo Kussama
Em 14/03/14, Anderson Saturninoander...@msisolucoes.com.br escreveu:
 Olá Emerson !

 Outra sugestão é você deixar como Trust onde era MD5, conforme exemplo
 abaixo:

 # IPv4 local connections:
 #DATABASES
 hostall all 127.0.0.1/32Trust
 hostall all 0.0.0.0/0   Trust



Creio que isto é exatamente o oposto do que foi solicitado na pergunta original.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Retornar records concatenados

2014-02-27 Por tôpico Osvaldo Kussama
Em 27/02/14, Carlos Antônio Pereira
(VidaUTI)carlosanto...@utivida.com.br escreveu:

 Amigão, você deve usuar o JOIN.
 De uma lida no site http://www.w3schools.com/sql/sql_join.asp para
 saber a respeito.

 Vou tentar te ajudar com o SQL abaixo:

 SELECT triagem.sintomatologia, triagem.orientacao, cid10.diagnostico,
 cid10.cid
 INTO record1
 FROM triagem
 INNER JOIN cid10 ON triagem.triagemid = cid10.triagemid AND
 cid10.servico  = p_servico
 WHERE triagem.servico  = p_servico;


 Vou explicar o contexto do negócio e o sistema:

 É uma empresa de emergência médica móvel. O sistema está sendo desenvolvido

 em EXTJS.

 Então, para um serviço temos:
 Tabela para registro dos serviços: classificacao, nome do paciente, idade,
 endereco...

 A classificação do serviço pode ser: Remoção ou Atendimento pré-hospitalar.
 Sendo remoção, teria o registro pertinente à remoção em uma tabela:
 dtagenda, destino1, destino2, etc...

 Ainda numa outra tabela observacao, tenho:
 tipo e descricao da observaçao, mais a fk do servico:

 num_servico, tipo, descricao

 Nesta tabela mantenho os registros de tipo text:

 Exemplo
 num_servico, tipo, descricao
 1001ORIENTACAO AO PACIENTE
 1002QUADRO CLINICO DO PACIENTE
 1003SINTOMATOLOGIA DO PACIENTE
 1004OBSERVACOES SOBRE O SERVICO
 1005OBSERVACOES SOBRE A REMOCAO


 Quando eu fizer uma seleção para mostrar o registro, faira assim assim:

 SELECT  * FROM servico WHERE num_servico = 100;
 SELECT  * FROM servico_remocao WHERE num_servico = 100;
 SELECT  descricao as orientacao FROM observacao WHERE num_servico = 100 AND

 tipo = 1;
 SELECT  descricao as quadro_clinico FROM observacao WHERE num_servico = 100

 AND tipo = 2;
 SELECT  descricao as obs_servico FROM observacao WHERE num_servico = 100 AND

 tipo = 4;
 SELECT  descricao as obs_remocao FROM observacao WHERE num_servico = 100 AND

 tipo = 5;

 Lembrando que:
 nem todo serviço tem registro de remoção, nem todo serviço tem registro de
 orientacao, quadro_clinico, obs_servico, obs_remocao.

 Então, no lugar de enviar varias consultas de um cliente para o servidor,
 pensei em buscar tudo com uma funcao.



Então, como já foi dito antes, estude os diversos tipos de JOIN que,
pela sua explicação, me parece que você desconhece, e faça uma única
consulta.

http://www.postgresql.org/docs/current/interactive/tutorial-join.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Retornar records concatenados

2014-02-27 Por tôpico Osvaldo Kussama
Em 27/02/14, Carlos Antônio Pereira
(VidaUTI)carlosanto...@utivida.com.br escreveu:
Então, como já foi dito antes, estude os diversos tipos de JOIN que,
pela sua explicação, me parece que você desconhece, e faça uma única
consulta.

 Osvaldo,

 Em um contexto de junção eu faria isso:

 SELECT
 s.*,  -- Registros do servico
 r.*,  -- Registros da Remocao
 st.ocorrencia AS sintomatologia, -- sintomatologia
 o.ocorrencia AS orientacao -- orientacao

 FROM servico s

   -- Liga remocao quando existir
   LEFT JOIN servico_agenda_remocao r
ON (s.num_servico = r.num_servico)

   --Liga orientacao quando existir
   LEFT JOIN servico_ocorrencias AS o
ON (s.num_servico = o.num_servico AND o.referencia = '00')


   --Liga sintomatologia quando existir
   LEFT JOIN servico_ocorrencias AS st
ON (s.num_servico = st.num_servico AND st.referencia = '01')


   --Liga quadro clinico quando existir
   LEFT JOIN servico_ocorrencias AS qc
ON (s.num_servico = qc.num_servico AND qc.referencia = '04')

 WHERE s.num_servico = 227571


 Isso resolve.
 Minha intenção com uma função seria  avaliar a classificação do serviço
 (Atendimento ou Remoção)
 e buscar apenas o que for pertinente:

 Atendimento:
 Possui 1 registro em serviço, 1 registro de sintomatologia e 1 registro de
 orientacao
 Remocao:
 Possui 1 registro em serviço, 1 registro em servico_remocao e 1 registro de

 quadro clinico


 Finalmente, o cerne da minha pergunta (vide título) seria da possibilidade
 de concatenar variaveis do tipo record e retorná-las.
 Nem entrei no contexto do negócio porque isso é irrelevante pelo texto que
 submeti à lista.

 SELECT 1 as um, 2 as dois INTO rec1   // Um retorno de única linha
 SELECT 3 as tres, 4 as quatro INTO rec2  // Um retorno de única linha

 concatenação rec1 X rec2:

 um dois tres quatro
 1   2 3   4



Nunca usei algo do tipo mas, pelo que entendo da documentação [1],
isto não seria possível em uma função PL/pgSQL.

O que você poderia tentar é construir diferentes SELECTs com
diferentes RETURNs mas, neste caso, creio que você teria problemas nas
chamadas da função (quando você retorna um RECORD você precisa
especificar na chamada a lista de campos, com respectivos tipos, que
está(ão) sendo retornado(s)).

Osvaldo

[1] 
http://www.postgresql.org/docs/current/interactive/plpgsql-declarations.html#PLPGSQL-DECLARATION-RECORDS
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] pg_restore com opção -j

2014-02-16 Por tôpico Osvaldo Kussama
Em 16/02/14, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
 Pessoal,

 Estou executando o restore (versão 9.1.11, ambiente de teste em linux) com
 o comando pg_restore -v -j4 -d banco  arquivo.sql

 Mas recebo a mensagem: pg_restore: [custom archiver] parallel restore from
 stdin is not supported

 Sem a opção -j o restore é executado normalmente.

 Estou errando em alguma coisa?



Do manual:
... The input must be a regular file or directory (not, for example,
a pipe). This option is ignored when emitting a script rather than
connecting directly to a database server.

http://www.postgresql.org/docs/current/interactive/app-pgrestore.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] pg_restore com opção -j

2014-02-16 Por tôpico Osvaldo Kussama
Em 16/02/14, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
 2014-02-16 20:36 GMT-03:00 Osvaldo Kussama osvaldo.kuss...@gmail.com:

 Em 16/02/14, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
  Pessoal,
 
  Estou executando o restore (versão 9.1.11, ambiente de teste em linux)
 com
  o comando pg_restore -v -j4 -d banco  arquivo.sql
 
  Mas recebo a mensagem: pg_restore: [custom archiver] parallel restore
 from
  stdin is not supported
 
  Sem a opção -j o restore é executado normalmente.
 
  Estou errando em alguma coisa?
 


 Do manual:
 ... The input must be a regular file or directory (not, for example,
 a pipe). This option is ignored when emitting a script rather than
 connecting directly to a database server.

 http://www.postgresql.org/docs/current/interactive/app-pgrestore.html

 Osvaldo

 Osvaldo, sinceramente não entendi.


Em seu comando você está fazendo o redirecionamento da entrada padrão
que o manual informa não ser possível.

Tente:
pg_restore -v -j4 -d banco arquivo.sql

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ultimos registro de cliente

2014-01-23 Por tôpico Osvaldo Kussama
Em 22/01/14, Antonio Cesarcgcesarsoa...@gmail.com escreveu:
 Versão 9.1
 sim, posso atualizaar sem problema...

 Em 21/01/2014 19:09, Matheus de Oliveira escreveu:



 2014/1/21 Antonio Cesar cgcesarsoa...@gmail.com
 mailto:cgcesarsoa...@gmail.com

 Boa tarde pessoal,
 Estou precisando de um select que retorne os 4 ultimos pedidos de
 cada cliente.
 EX:
 Cliente 001 pedido 10, 15, 18 e 20
 Cliente 002 pedido 11, 12, 13 e 14




Na 9.1 é possível utilizar window functions com rank().
Veja o penúltimo exemplo em:
http://www.postgresql.org/docs/9.1/interactive/tutorial-window.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] O Banco vai encher?

2014-01-03 Por tôpico Osvaldo Kussama
Em 03/01/14, rodrigo jrodrigo...@hotmail.com escreveu:
 2 gb de backup em .dump que é a única maneira que sei de como olhar o
 tamanho do banco...

 estou usando Windows 7 (não é server)



Então dê uma estudada em:
http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Vaga: Profissional para atuar com Banco de dados - Florianópolis

2013-12-03 Por tôpico Osvaldo Kussama
Em 03/12/13, MrBiTsmrbits@gmail.com escreveu:
 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA256

 On 12/03/2013 01:54 PM, Flávio Alves Granato wrote:
 Não querendo ser chato mas já sendo chato...

 Sendo muito mais chato ainda, JAMAIS alguém com 6 meses de experiência é
 sequer capaz de tirar uma PMP, quanto mais saber tudo
 isso de banco de dados. Eu já esquecí assuntos sobre SGBDs que o pessoal que
 tem 3, 4 anos de mercado vai levar duas vidas para
 aprender. Alguém por aí conhece ZIM ? Por 3.9K eu não saio de casa. Faço
 isso só minerando bitcoin. Um profissional desse nível,
 com todos esses conhecimentos, custa para a minha empresa algo como 12 a 15K
 CLT.

 Isso é arriscado, porque ou vão arrumar um capa-de-gaiola que só vai fazer
 porcarias ou vão arrumar um mega-master DBA que vai
 ficar dois meses por lá e vai sair na primeira oportunidade. Recomendo
 vivamente rever os requisitos da vaga.



Creio que você não entenderam.

Existe uma lei, que alterou a CLT, proibindo que se exija mais de 6
meses de experiência.
http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11644.htm

Art. 442-A.  Para fins de contratação, o empregador não exigirá do
candidato a emprego comprovação de experiência prévia por tempo
superior a 6 (seis) meses no mesmo tipo de atividade.

Ou seja, qualquer fiscal do trabalho já tem um motivo a mais para
multar a empresa.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Consulta Select

2013-11-24 Por tôpico Osvaldo Kussama
Em 24/11/13, Ramiro Pamponetroli...@oi.com.br escreveu:
 Salve, Salve Galera!

 Minha dúvida é a seguinte ...

 Estou utilizando o PostgreSQL 9.1.2 e estou desenvolvendo uma aplicação em
 Java para Clínicas Veterinárias. Criei uma tela só para cadastrar o
 prontuário de cada paciente. Existem 3 tabelas que estão diretamente
 interligadas (uma que cadastra o prontuário propriamente dito, uma que
 cadastra o tipo de atendimento (Consulta, Banho/Tosa, Vacinação, etc) e o
 código do prontuário, outra que cadastra as consultas) A tabela consultas
 se relaciona com outras 2 tabelas: anamnese e prescrição. No programa a
 gravação dos dados em cada uma das tabelas (Consulta, Anamnese e
 Prescrição) é independente. Quando o usuário seleciona uma linha na tabela
 consultas os dados referentes à anamnese e prescrição são mostrados em suas
 respectivas abas (ainda não está funcionando). Para gerar uma anamnese ou
 prescrição é necessário haver uma consulta já cadastrada. Meu problema é
 que não estou conseguindo recuperar as informações do banco de dados com a
 query abaixo, pois as outras tabelas (anamnese prescrição)  ainda estão
 vazias. como devo tratar esses campos para a query me retornar os campos
 que possuem algum dado gravado?

 A query que estou utilizando é a seguinte

 String sql = select c.id as codconsulta, c.codveterinario as
 codveterinario, c.data as data, 
 + c.flg_reconsulta as flg_reconsulta, c.data_referencia as
 data_referencia, 
 + p.id as codprescricao, p.prescricao as prescricao, 
 + f.nome as nome, a.hist_pass as hist_pass, a.hist_atual
 as hist_atual, 
 + a.queixa_pri as queixa_pri, a.sinto_pri as sinto_pri,
 a.queixa_sec as queixa_sec, 
 + a.sinto_sec as sinto_sec, a.out_pat as out_pat,
 a.int_ant as int_ant, 
 + a.med_uso as med_uso, a.alergias as alergias,
 a.susp_diag as susp_diag, 
 + a.prognostico as prognostico, a.diagnostico as
 diagnostico, a.alt_lab as alt_lab, 
 + a.dieta as dieta, a.acompanhamento as acompanhamento,
 a.conduta as conduta, 
 + a.recomendacao as recomendacao, a.tratamento as
 tratamento, a.evolucao as evolucao 
 + from consultas c, anamnese a, prescricoes p,
 veterinarios v, funcionarios f 
 + where c.id = a.codconsulta and c.id  = p.codconsulta and
 
 + c.codveterinario = v.id and v.codfuncionario = f.id 
 + and c.codprontuario = + tfNumProntuario.getText();

 Se ignoro os campos que não possuem dados a consulta mostra o resultado das
 tabelas consultas e funcionarios (nome).



Utilize OUTER JOIN (LEFT ou RIGHT de acordo com cada tabela).

http://www.postgresql.org/docs/current/interactive/queries-table-expressions.html#QUERIES-JOIN

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida! Query com BUG!

2013-10-30 Por tôpico Osvaldo Kussama
Em 30/10/13, Ramiro Pamponetroli...@oi.com.br escreveu:
 Bom dia Pessoal,

 utilizo a seguinte query abaixo para montar um relatório no iReport para
 meu programa ...
 -
 select distinct unidade, estado, extract(year from data) as ano,
 extract(month from data) as mes, sum(vendas) as atendimentos from(
 select distinct nom_filial as unidade, est_filial as estado, (dat_emissao)
 as data, count(dat_emissao) as vendas
 from cadcvend, cadfilia
 where cadfilia.cod_filial = cadcvend.cod_filial
 and flg_excluido is null
 and num_nf is null
 and extract(year from dat_emissao) between $P{ano_ini} and $P{ano_fim}
 and extract(month from dat_emissao) between $P{mes_ini} and $P{mes_fim}
 group by dat_emissao, nom_filial, est_filial order by dat_emissao) as
 registro
 where extract(year from data) between $P{ano_ini} and $P{ano_fim}
 and extract(month from data) between $P{mes_ini} and $P{mes_fim}
 group by extract(year from data), extract(month from data), unidade, estado
 order by extract(year from data), extract(month from data)
 -
 ... onde os parâmetros $P{ano_ini}, $P{ano_fim}, $P{mes_ini} e $P{mes_fim}
 são passados pelo programa com DOUBLE e na configuração dos parâmetros no
 relatório eu os declaro  assim - new Double(valor).

 O relatório funciona perfeitamente, se for considerado um período entre os
 meses de 1 a 12 dentro do mesmo ano ou se for considerado todos os meses de
 vários anos, mesmo o ano não tendo acabado ainda.

 Para minha surpresa, estava realizando alguns teste no programa e percebi o
 seguinte bug: considerando o mês inicial = 1, o ano inicial = 2005, o mês
 final = 5 e o ano final = 2006 (por exemplo), o relatório rea montado da
 seguinte forma ...

 Ano   MêsAtendimentos
 2005  1xxx
 2005  2xxx
 2005  3xxx
 2005  4xxx
 2005  5xxx
 2006  1xxx
 2006  2xxx
 2006  3xxx
 2006  4xxx
 2006  5xxx

 ... pulando os meses 6 a 12 do ano de 2005 (por exemplo).

 Em um fórum do GUJ fui orientado a modificar minha query da seguinte forma
 ...
 -
 select distinct unidade, estado, extract(year from data) as ano,
 extract(month from data) as mes, sum(vendas) as atendimentos from(
 select distinct nom_filial as unidade, est_filial as estado, (dat_emissao)
 as data, count(dat_emissao) as vendas
 from cadcvend, cadfilia
 where cadfilia.cod_filial = cadcvend.cod_filial
 and flg_excluido is null
 and num_nf is null
 and extract(year from dat_emissao) || extract(month from dat_emissao)
 between $P{ano_ini} || $P{mes_ini} and $P{ano_fim} || $P{mes_fim}
 group by dat_emissao, nom_filial, est_filial order by dat_emissao) as
 registro
 where extract(year from dat_emissao) || extract(month from dat_emissao)
 between $P{ano_ini} || $P{mes_ini} and $P{ano_fim} || $P{mes_fim}
 group by extract(year from data), extract(month from data), unidade, estado
 order by extract(year from data), extract(month from data)
 -
 ... que resolveu meu problema em parte, pois dessa forma pega todos os
 meses do intervalo de ano selecionado, mas no último ano, se ainda não
 tiver sido concluído (exemplo 2013) ele pega apenas o 1º e o último mês do
 intervalo, pulando todos os outros meses do ano, mas se considerar apenas o
 ano de 2013 e os meses de 1 a 10, o relatório sai correto, ou se considerar
 apenas anos que já foram concluídos, ou então, sempre considerar o mês
 inicial = 1 e o mês final = 12.

 Existe alguma forma de juntar o que está dando certo no 1º relatório com o
 que está dando certo no 2º relatório?

 As sugestões serão bem vidas!

 Obrigado aos que puderem me dar essa ajuda



Sua query original faz exatamente o que você definiu. Na realidade ela
contém um erro de lógica.

Sua segunda query está incompleta. Falta um fecha parênteses em algum lugar.

Como sugestão troque:
extract(year from dat_emissao) || extract(month from dat_emissao)
between $P{ano_ini} || $P{mes_ini} and $P{ano_fim} || $P{mes_fim}
e similares, por:
date_trunc('month', dat_emissao) BETWEEN to_date('01'|| $P{mes_ini} ||
$P{ano_ini}, 'DDMM') AND to_date('01'|| $P{mes_fim} ||
$P{ano_fim}, 'DDMM')

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com select

2013-10-28 Por tôpico Osvaldo Kussama
2013/10/28, Danilo Silva danilo.dsg.go...@gmail.com:
 Pessoal,

 Tendo a seguinte estrutura:

 CREATE TABLE leitura (
 codmovimento integer,
 dtmovimento date,
 codbarras text
 );

 INSERT INTO leitura VALUES
 (1,'2013-01-04', 'ABCD'),
 (1,'2013-01-04', 'ABCDEF'),
 (2,'2013-01-05', 'ABCD'),
 (1,'2013-01-03', 'XYZ'),
 (1,'2013-01-07', 'FULANO'),
 (2,'2013-01-07', 'XYZ');

 Preciso fazer um select onde traga, uma coluna com o codmovimento e cada
 dtmovimento sendo uma coluna com a contagem total de cada movimento,
 exemplo:

 codmovimento | 2013-01-03 | 2013-01-04 | 2013-01-05 | 2013-01-07
 --+-++-+
1 |1 |   2 |   0
 |   1
2 |0 |   0 |   1
 |   1
 (2 rows)



Pesquise por crosstab no módulo adicional tablefunc:
http://www.postgresql.org/docs/current/interactive/tablefunc.html

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ajuda com select

2013-10-28 Por tôpico Osvaldo Kussama
Em 28/10/13, Danilo Silvadanilo.dsg.go...@gmail.com escreveu:
 2013/10/28 Osvaldo Kussama osvaldo.kuss...@gmail.com

 2013/10/28, Danilo Silva danilo.dsg.go...@gmail.com:
  Pessoal,
 
  Tendo a seguinte estrutura:
 
  CREATE TABLE leitura (
  codmovimento integer,
  dtmovimento date,
  codbarras text
  );
 
  INSERT INTO leitura VALUES
  (1,'2013-01-04', 'ABCD'),
  (1,'2013-01-04', 'ABCDEF'),
  (2,'2013-01-05', 'ABCD'),
  (1,'2013-01-03', 'XYZ'),
  (1,'2013-01-07', 'FULANO'),
  (2,'2013-01-07', 'XYZ');
 
  Preciso fazer um select onde traga, uma coluna com o codmovimento e
  cada
  dtmovimento sendo uma coluna com a contagem total de cada movimento,
  exemplo:
 
  codmovimento | 2013-01-03 | 2013-01-04 | 2013-01-05 | 2013-01-07
 
 --+-++-+
 1 |1 |   2 |
   0
  |   1
 2 |0 |   0 |
   1
  |   1
  (2 rows)
 


 Pesquise por crosstab no módulo adicional tablefunc:
 http://www.postgresql.org/docs/current/interactive/tablefunc.html

 Osvaldo


 Aparentemente crosstab resolveria, mas eu teria que mencionar as colunas,
 e no meu caso, não daria para saber quais são, já que as colunas seriam as
 datas... a não ser que eu crie uma função para resolver o meu problema...



Creio que a variante de 2 parâmetros resolveria. (F.36.1.4.
crosstab(text, text))
O segundo parâmetro seria:
SELECT DISTINSCT dtmovimento FROM leitura ORDER BY 1;
Você teria a relação de todas as datas existentes.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


  1   2   3   4   5   6   7   8   9   10   >