Re: [pgbr-geral] Campo calculado
Em 18/04/2018, Rogério Martinsescreveu: > 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
Em 27/09/2017, Santiago - NSRescreveu: > 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
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
Em 26/09/2017, Santiago - NSRescreveu: > 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
Em 14/07/2017, Kauan Mocelinescreveu: > 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
Em 13/07/2017, Flavio Rescia Diasescreveu: > 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
Em 23/06/2017, Ricardoescreveu: > 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
Em 04/05/2017, j...@inbraco.comescreveu: > 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
Em 21/04/2017, Edson Lidorioescreveu: > 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
Em 21/04/2017, POWER Informáticaescreveu: > 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 )
Em 11/11/16, POWER Informáticaescreveu: > 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
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
Em 09/11/16, Carlos Antônioescreveu: > 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
Em 08/11/16, Alan Tavaresescreveu: > 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
Em 18/10/16, Amirescreveu: > 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
Em 12/09/16, Ricardoescreveu: > 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?
Em 26/08/16, siste...@mvsoftware.com.brescreveu: > 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
Em 07/08/16, Marcelo Zoelescreveu: > 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
Em 22/04/16, Ricardoescreveu: > 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 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
Em 09/03/16, Pauloescreveu: > 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 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
Em 18/02/16, André Ormeneseescreveu: > 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)
Em 17/02/16, Anderson Martinsescreveu: > 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":
Em 09/02/16, Thiago H. Barretoescreveu: > 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
Em 07/02/16, Saraiva Silvaescreveu: > 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
Em 06/02/16, Saraiva Silvaescreveu: > 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
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
Em 02/02/16, lu moraes santosescreveu: > 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
Em 01/02/16, lu moraes santosescreveu: > 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
Em 01/02/16, lu moraes santosescreveu: > 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
Em 01/02/16, lu moraes santosescreveu: > 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
Em 21/01/16, Douglas Fabiano Spechtescreveu: > 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
Em 05/01/16, lu moraes santosescreveu: > 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
Em 05/01/16, lu moraes santosescreveu: > 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
Em 03/12/15, Crauss, Jacsonescreveu: > 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
Em 23/11/15, Guimarães Faria Corcete DUTRA, Leandroescreveu: > 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
Em 21/11/15, Luciano Reisescreveu: > 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
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 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
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
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
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
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
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
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
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
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?
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
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
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
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 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
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
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
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
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.
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
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
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
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
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
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
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 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
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
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 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
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 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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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?
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
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
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!
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, 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
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