-
Total de itens
463 -
Registro em
-
Última visita
Posts postados por Kakao
-
-
A dica é fazer um outer join e na cláusula where testar o nulo. Sim sei montar um select mas você tem que mostrar serviço primeiro.
-
Isto é trabalho escolar? O que você já tentou?
-
Tenta assim:
) gs(mes) on gs.mes = e.mes
-
Para mostrar os meses sem movimento fica assim:
with v_entradas as ( select date_trunc('month', ent_data) mes, sum(ent_valor) soma from entradas where extract(year from ent_data) = extract(year from now()) group by 1 ), v_saidas as ( select date_trunc('month', sai_data) mes, sum(sai_valor) soma from saidas where extract(year from sai_data) = extract(year from now()) group by 1 ) select to_char(gs.mes, 'YYYY-MM') mes, round(coalesce(e.soma, 0), 4) entrada, round(coalesce(s.soma, 0), 4) saida, round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 4) saldo from v_entradas e inner join v_saidas s on e.mes = s.mes right outer join generate_series ( date_trunc('year', now()), date_trunc('year', now()) + interval '1 year - 1 month', '1 month' ) gs(mes)
-
quando uma das tabelas não contêm dados a query não retorna nada, teria alguma maneira de mandar o valor zero para soma?
Qual é a versão do postgresql?
-
Pelo que entendi o que você quer é isto:
with v_entradas as ( select date_trunc('month', ent_data) mes, sum(coalesce(ent_valor, 0)) soma from entradas where extract(year from ent_data) = extract(year from now()) group by 1 ), v_saidas as ( select date_trunc('month', sai_data) mes, sum(coalesce(sai_valor, 0)) soma from saidas where extract(year from sai_data) = extract(year from now()) group by 1 ) select to_char(e.mes, 'YYYY-MM') mes, round(e.soma, 4) soma, round(s.soma, 4) soma, round(e.soma - s.soma, 4) saldo from v_entradas e inner join v_saidas s on e.mes = s.mes
-
Para otimização é necessário mostrar a consulta que se quer melhorar e a estrutura das respectivas tabelas. E a versão do postgresql.
-
Desligue o firewall só para testar. Retire a linha 192.168.254.0/32 trust e deixe só 192.168.254.0/24 trust.
-
Você já tentou url_encode?
-
Mostre o código onde você recebe os campos antes de passar para o postgresql (php, python, etc)
-
Você pode concatenar os números numa string binária:
create table jogo ( codigo integer, num binary(2), primary key (codigo, num) ); insert into jogo (codigo, num) values (1, concat(unhex(hex(240)), unhex(hex(40)))) ; select codigo, conv(hex(left(num, 1)), 16, 10) n1, conv(hex(mid(num, 2, 1)), 16, 10) n2 from jogo; +--------+------+------+ | codigo | n1 | n2 | +--------+------+------+ | 1 | 240 | 40 | +--------+------+------+
-
O que aconteceu com o seu teste é que você digitou a string e ela foi com a codificação do seu terminal e aí ficou diferente do que está na base.
Veja que quando você for comparar uma string vinda de um feed com a que está na base as duas vão ter a mesma codificação. A não ser que o desenvolvedor do feed fique alterando. Então me parece que trocar os caracteres especiais é uma complicação desnecessária. Se for realmente necessário trocar os caracteres então eu acho que vale a pena pensar um pouco mais se a abordagem do hash é a mais indicada.
-
Crie um arquivo com os comandos que você quer que sejam executados, por exemplo meu_script.sql:
select minha_funcao(meu_parametro); select outra_funcao();
Se for Linux coloque o comando psql no seu crontab:* * * * * psql --file /caminho/para/meu_script.sql -U usuario_da_base minha_base &
Se for Windows use o agendador de tarefas para rodar o script.
-
Pra mim funcionou. Eu testei assim:
create table fee_itens ( ite_unico varchar(255), ite_codigo integer, ite_md5 binary(8) ); insert into fee_itens (ite_unico, ite_codigo, ite_md5) values( 'Veneno de aranha é usado em pesquisa contra disfunção erétil', 7395927, unhex(left(md5('Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16)) ); select ite_codigo, ite_unico, ite_md5, unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16)) FROM fee_itens where ite_md5 = unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16)) ; +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+ | ite_codigo | ite_unico | ite_md5 | unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16)) | +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+ | 7395927 | Veneno de aranha é usado em pesquisa contra disfunção erétil | *A(%1 | *A(%1 | +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------+
Teste a consulta a seguir e poste o resultado:select ite_codigo, ite_unico, ite_md5, unhex(left(md5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil'), 16)) FROM fee_itens where ite_codigo = 7395927 ; +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+ | ite_codigo | ite_unico | ite_md5 | UNHEX( LEFT( MD5( 'Veneno de aranha é usado em pesquisa contra disfunção erétil' ) , 16 ) ) | +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+ | 7395927 | Veneno de aranha é usado em pesquisa contra disfunção erétil | *A(%1 | *A(%1 | +------------+------------------------------------------------------------------+----------+-------------------------------------------------------------------------------------------------+
Mostre o create da tabela fee_itens e também o insert da linha acima.
-
Você setou o campo ite_md5 com o hash do campo ite_unico:
update fee_itens set ite_md5 = unhex( md5(ite_unico) );
Depois comparou com o hash de outro campo, o ite_codigo:SELECT ite_unico, ite_md5, UNHEX( MD5( ite_codigo ) ) AS conf_md5 FROM fee_itens
Experimente comparar com o hash de ite_unico:SELECT ite_unico, ite_md5, UNHEX( MD5( ite_unico ) ) AS conf_md5 FROM fee_itens
-
Com tamanho 16 o índice vai ter o dobro do tamanho e portanto vai levar mais tempo para ser percorrido. A diferença real só poderá ser testada com uma tabela grande. Talvez seja pouco ou talvez seja mais. Só testando.
-
É só "md5_hash binary(8)". Índice normal btree.
-
Só não entendi bem a aplicação de fazer essa hash... é pra melhorar a performance na hora de fazer um SELECT nele?
Exato. Uma busca em um campo binário indexado vai ser muito mais rápida do que um full text search. Se a consequência da colisão não é importante então você pode diminuir o tamanho do binary para 8 por exemplo para ficar mais eficiente:
create table t ( feed_unico_campo text, feed_unico_valor text, md5_hash binary(8) ); insert into t (feed_unico_campo, feed_unico_valor, md5_hash) values ('ckslsdkdi', 'kdksoskd', unhex(left(md5(concat('ckslsdkdi', 'kdksoskd')), 16))) ; select * from t where md5_hash = unhex(left(md5(concat('ckslsdkdi', 'kdksoskd')), 16)) ;
-
Qual é o tamanho da string de texto? Uma opção é salvar o hash das strings concatenadas em uma coluna BINARY:
create table t ( feed_unico_campo text, feed_unico_valor text, md5_hash binary(16) ); insert into t (feed_unico_campo, feed_unico_valor, md5_hash) values ('ckslsdkdi', 'kdksoskd', unhex(md5(concat('ckslsdkdi', 'kdksoskd')))) ; select * from t where md5_hash = unhex(md5(concat('ckslsdkdi', 'kdksoskd'))) ;
A chance de colisão de um hash md5 (128 bits) é insignificante:
http://en.wikipedia.org/wiki/Birthday_para...obability_table
-
select c.*, d.*, o.ip, o.domain, o.computer from ( select ip from cacic union select ip from dhcp union select ip from officescan ) u left join cacic c on u.ip = c.ip left join dhcp d on u.ip = d.ip left join officescan o on u.ip = o.ip where c.ip is null
-
select t.id, t.cpf from ( select cpf from ( select id, cpf from t group by id, cpf ) s group by cpf having count(*) > 1 ) s inner join t on t.cpf = s.cpf order by t.cpf, t.id
-
select cpf from t group by cpf having count(*) > 1 order by cpf
-
Não a senha e normal.
Se não está criptografada não é senha normal. É senha ruim. Tentar ajudar é dar corda para você se enforcar.
-
A senha está criptografada?
Como utilizar EXTRACT do Mes e Ano e filtrar pelo resultado.
em PostgreSQL
Postado