Re: [pgbr-geral] REF: RETORNO DE SALDO - WINDOW FUNCTION

2014-09-05 Thread Flavio Henrique Araque Gurgel

Olá Pessoal,

Tenho duas tabelas: Tabela Saldos das Contas e Tabela Saidas. EX:
TABELA SALDOS:
CONTA|SALDO
200  | 200.00
201  | 500.00

Tenho o seguinte sentença que me retorna a soma das contas, como segue:
SELECT row_number() OVER(PART BY conta ORDER BY conta,valor),
 setor,
 valor,
 conta,
 SUM(valor) OVER(PART BY conta ORDER BY conta,valor) as Total
FROM saidas
ORDER BY conta.

RETORNO:
1-1-200-50.00-50.00
2-1-200-60.00-110.00
3-1-200-50.00-160.00
1-1-201-80.00-80.00
2-1-201-40.00-120.00
3-1-201-30.00-150.00

Preciso buscar o saldo de cada conta da tabela saldos para ficar assim:
SALDO  200.00
1-1-200-50.00-250.00
2-1-200-60.00-310.00
3-1-200-50.00-360.00
SALDO  500.00
1-1-201-80.00-580.00
2-1-201-40.00-620.00
3-1-201-30.00-650.00

Alguem pode dar uma dica ?



CTE com RECURSIVE :
http://www.postgresql.org/docs/current/static/queries-with.html

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


Re: [pgbr-geral] Failback em replicação nativa PostgreSQL 9.3

2014-09-05 Thread Matheus de Oliveira
2014-09-04 22:06 GMT-03:00 Danilo Silva :

> ​Então não tem jeito mesmo, tem que ser feito, no meu caso, o
> pg_basebackup novamente.
>
> Perguntei isso porque o processo do pg_basebackup leva quase 2 horas...
> Imaginando nas possíveis transações que podem ocorrer nesse período, o
> parâmetro wal_keep_segments pode me ajudar a não *perder* essas transações
> durante o processo, correto?
>


O problema é que no momento da queda pode acontecer do servidor primário
estar um pouco a frente do secundário, daí como o você promoveu o
secundário, eles estão em pontos diferentes e não há como mais fazer o
antigo-primário seguir o novo. E nesse caso o wal_keep_segments não vai te
ajudar em nada. Logo, a melhor e mais confiável solução é mesmo fazer um
backup base novamente.

Uma ferramenta que talvez ajude é a pg_rewind [1], mas admito que nunca a
usei (achei arriscado demais). Ela foi feita para voltar um secundário à
sincronia com o primário após o primeiro ter sido promovido. Não sei dizer
ao certo se ela também pode fazer o contrário.

De qualquer forma, no caso de failback, eu não acho que 2 horas seja um
valor alto. Afinal, um failover não é algo que deve acontecer com
frequência.

[1] https://github.com/vmware/pg_rewind

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


Re: [pgbr-geral] Failback em replicação nativa PostgreSQL 9.3

2014-09-05 Thread Flavio Henrique Araque Gurgel

​Então não tem jeito mesmo, tem que ser feito, no meu caso, o
pg_basebackup novamente.

Perguntei isso porque o processo do pg_basebackup leva quase 2
horas... Imaginando nas possíveis transações que podem ocorrer nesse
período, o parâmetro wal_keep_segments pode me ajudar a não *perder*
essas transações durante o processo, correto?



O problema é que no momento da queda pode acontecer do servidor primário
estar um pouco a frente do secundário, daí como o você promoveu o
secundário, eles estão em pontos diferentes e não há como mais fazer o
antigo-primário seguir o novo. E nesse caso o wal_keep_segments não vai
te ajudar em nada. Logo, a melhor e mais confiável solução é mesmo fazer
um backup base novamente.

Uma ferramenta que talvez ajude é a pg_rewind [1], mas admito que nunca
a usei (achei arriscado demais). Ela foi feita para voltar um secundário
à sincronia com o primário após o primeiro ter sido promovido. Não sei
dizer ao certo se ela também pode fazer o contrário.

De qualquer forma, no caso de failback, eu não acho que 2 horas seja um
valor alto. Afinal, um failover não é algo que deve acontecer com
frequência.

[1] https://github.com/vmware/pg_rewind


Essa ferramenta pode ser uma dádiva do failback e bastante discussão foi 
colocada em cima dela.


Como ela está sendo desenvolvida em cima do 9.4, tudo é muito beta 
ainda, tanto o PostgreSQL quanto a própria ferramenta, mas acho que ela 
tem tudo para emplacar e entrar na árvore contrib oficial em uma ou duas 
versões.


Num banco de dados de vários gigabytes, aplicar as modificações a partir 
do WAL é algo bastante interessante para recolocar rapidamente as coisas 
em estado de alta disponibilidade novamente. Note que a ferramenta exige 
que a nova funcionalidade de checksums esteja habilitada ou 
wal_hint_bits, logo, a restauração deve ser bastante segura em termos de 
confiabilidade.


Testemos!

[]s
Flavio Gurgel
___
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: RETORNO DE SALDO - WINDOW FUNCTION

2014-09-05 Thread Matheus de Oliveira
2014-09-04 23:21 GMT-03:00 Paulo Pereira :

> Tenho duas tabelas: Tabela Saldos das Contas e Tabela Saidas. EX:
> TABELA SALDOS:
> CONTA|SALDO
> 200  | 200.00
> 201  | 500.00
>
> Tenho o seguinte sentença que me retorna a soma das contas, como segue:
> SELECT row_number() OVER(PART BY conta ORDER BY conta,valor),
> setor,
> valor,
> conta,
> SUM(valor) OVER(PART BY conta ORDER BY conta,valor) as Total
> FROM saidas
> ORDER BY conta.
>
> RETORNO:
> 1-1-200-50.00-50.00
> 2-1-200-60.00-110.00
> 3-1-200-50.00-160.00
> 1-1-201-80.00-80.00
> 2-1-201-40.00-120.00
> 3-1-201-30.00-150.00
>
> Preciso buscar o saldo de cada conta da tabela saldos para ficar assim:
> SALDO  200.00
> 1-1-200-50.00-250.00
> 2-1-200-60.00-310.00
> 3-1-200-50.00-360.00
> SALDO  500.00
> 1-1-201-80.00-580.00
> 2-1-201-40.00-620.00
> 3-1-201-30.00-650.00
>
> Alguem pode dar uma dica ?
>


Eu faria usando UNION ALL, da seguinte forma:

SELECT 1 AS tipo,
NULL::bigint,
NULL::integer AS setor,
NULL::numeric AS valor,
conta,
saldo AS Total
FROM saldo
UNION ALL
SELECT 2 AS tipo,
row_number() OVER(PARTITION BY conta ORDER BY valor),
setor,
valor,
conta,
SUM(valor) OVER(PARTITION BY conta ORDER BY valor) as Total
FROM saidas
ORDER BY conta, tipo, valor

Assim, na aplicação você só itera os registros (que já virão ordenados),
quando tipo for 1 é "saldo", quando tipo for 2 é "conta".

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


Re: [pgbr-geral] REF: RETORNO DE SALDO - WINDOW FUNCTION

2014-09-05 Thread Emerson Hermann
Outra sugestão ...

http://emersonhermann.blogspot.com.br/2013/01/desenvolvendo-querys-sql-para-razao-e.html

http://www.emersonhermann.blogspot.com.br/2012/09/consulta-sql-de-plano-de-contas-query.html


Em 5 de setembro de 2014 09:24, Matheus de Oliveira <
matioli.math...@gmail.com> escreveu:

>
> 2014-09-04 23:21 GMT-03:00 Paulo Pereira :
>
> Tenho duas tabelas: Tabela Saldos das Contas e Tabela Saidas. EX:
>> TABELA SALDOS:
>> CONTA|SALDO
>> 200  | 200.00
>> 201  | 500.00
>>
>> Tenho o seguinte sentença que me retorna a soma das contas, como segue:
>> SELECT row_number() OVER(PART BY conta ORDER BY conta,valor),
>> setor,
>> valor,
>> conta,
>> SUM(valor) OVER(PART BY conta ORDER BY conta,valor) as Total
>> FROM saidas
>> ORDER BY conta.
>>
>> RETORNO:
>> 1-1-200-50.00-50.00
>> 2-1-200-60.00-110.00
>> 3-1-200-50.00-160.00
>> 1-1-201-80.00-80.00
>> 2-1-201-40.00-120.00
>> 3-1-201-30.00-150.00
>>
>> Preciso buscar o saldo de cada conta da tabela saldos para ficar assim:
>> SALDO  200.00
>> 1-1-200-50.00-250.00
>> 2-1-200-60.00-310.00
>> 3-1-200-50.00-360.00
>> SALDO  500.00
>> 1-1-201-80.00-580.00
>> 2-1-201-40.00-620.00
>> 3-1-201-30.00-650.00
>>
>> Alguem pode dar uma dica ?
>>
>
>
> Eu faria usando UNION ALL, da seguinte forma:
>
> SELECT 1 AS tipo,
> NULL::bigint,
> NULL::integer AS setor,
> NULL::numeric AS valor,
> conta,
> saldo AS Total
> FROM saldo
> UNION ALL
> SELECT 2 AS tipo,
> row_number() OVER(PARTITION BY conta ORDER BY valor),
> setor,
> valor,
> conta,
> SUM(valor) OVER(PARTITION BY conta ORDER BY valor) as Total
> FROM saidas
> ORDER BY conta, tipo, valor
>
> Assim, na aplicação você só itera os registros (que já virão ordenados),
> quando tipo for 1 é "saldo", quando tipo for 2 é "conta".
>
> 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
>
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] FATAL: terminando conexão por causa de um conflito com recuperação

2014-09-05 Thread Ariel Alves
Pessoal bom dia,


Tenho um ambiente replicado com a replicação nativa do postgres, onde no
slave para dividir a carga nas consultas apontei alguns sistemas que só
fazem selects (nada de inserts, updates).

Agora no log do Slave está aparecendo as seguintes mensagens:



2014-09-05 09:48:11 BRT [12271]: [1-1] user=postgres,db=base FATAL:
 terminando conexão por causa de um conflito com recuperação
2014-09-05 09:48:11 BRT [12271]: [2-1] user=postgres,db=base DETALHE:
 Consulta do usuário pode ter precisado acessar versões de registros que
devem ser removidas.
2014-09-05 09:48:11 BRT [12271]: [3-1] user=postgres,db=base DICA:  Dentro
de instantes você poderá conectar novamente ao banco de dados e repetir seu
commando.
2014-09-05 09:48:11 BRT [12286]: [8-1] user=postgres,db=base ERRO:
 cancelando comando por causa de um conflito com recuperação
2014-09-05 09:48:11 BRT [12286]: [9-1] user=postgres,db=base DETALHE:
 Consulta do usuário pode ter precisado acessar versões de registros que
devem ser removidas.


Fiz uma procura rapida no google, mas não tive muito sucesso. Vocês já
passaram por isto alguma vez?



-- 

José Ariel Ferreira Alves
arielalves...@gmail.com
ariel.al...@msn.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] FATAL: terminando conexão por causa de um conflito com recuperação

2014-09-05 Thread Flavio Henrique Araque Gurgel

Pessoal bom dia,


Tenho um ambiente replicado com a replicação nativa do postgres, onde no
slave para dividir a carga nas consultas apontei alguns sistemas que só
fazem selects (nada de inserts, updates).

Agora no log do Slave está aparecendo as seguintes mensagens:



2014-09-05 09:48:11 BRT [12271]: [1-1] user=postgres,db=base FATAL:
  terminando conexão por causa de um conflito com recuperação
2014-09-05 09:48:11 BRT [12271]: [2-1] user=postgres,db=base DETALHE:
  Consulta do usuário pode ter precisado acessar versões de registros
que devem ser removidas.
2014-09-05 09:48:11 BRT [12271]: [3-1] user=postgres,db=base DICA:
  Dentro de instantes você poderá conectar novamente ao banco de dados e
repetir seu commando.
2014-09-05 09:48:11 BRT [12286]: [8-1] user=postgres,db=base ERRO:
  cancelando comando por causa de um conflito com recuperação
2014-09-05 09:48:11 BRT [12286]: [9-1] user=postgres,db=base DETALHE:
  Consulta do usuário pode ter precisado acessar versões de registros
que devem ser removidas.


Fiz uma procura rapida no google, mas não tive muito sucesso. Vocês já
passaram por isto alguma vez?


Você não disse a versão.
Isso ocorre porque uma tupla não necessária ao mestre e que foi removida 
por uma passagem do autovacuum é necessária à consulta no escravo.
Para evitar isso, ligar a configuração "hot_standby_feedback" no 
escravo. Isso está disponível a partir da versão 9.1. Na versão 9.0 
existem algumas estratégias possíveis.


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


Re: [pgbr-geral] FATAL: terminando conexão por causa de um conflito com recuperação

2014-09-05 Thread Ariel Alves
Obrigado Flavio,

Desculpa, a versão é a 9.1.14. Fiz o ajuste em  "hot_standby_feedback",
agora é só acompanhar.

Segue a configuração de replicação do Escravo da maneira que deixei.


# - Master Server -
# These settings are ignored on a standby server
#max_wal_senders = 0# max number of walsender processes
# (change requires restart)
#wal_sender_delay = 1s  # walsender cycle time, 1-1 milliseconds
#wal_keep_segments = 0  # in logfile segments, 16MB each; 0 disables
#vacuum_defer_cleanup_age = 0   # number of xacts by which cleanup is
delayed
#replication_timeout = 60s  # in milliseconds; 0 disables
#synchronous_standby_names = '' # standby servers that provide sync rep
# comma-separated list of application_name
# from standby(s); '*' = all

# - Standby Servers -
# These settings are ignored on a master server
hot_standby = on# "on" allows queries during
recovery
# (change requires restart)
#max_standby_archive_delay = 30s# max delay before canceling queries
# when reading WAL from archive;
# -1 allows indefinite delay
#max_standby_streaming_delay = 30s  # max delay before canceling queries
# when reading streaming WAL;
# -1 allows indefinite delay
#wal_receiver_status_interval = 10s # send replies at least this often
# 0 disables
hot_standby_feedback = on   # send info from standby to prevent
# query conflicts




Em 5 de setembro de 2014 10:01, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

> Pessoal bom dia,
>>
>>
>> Tenho um ambiente replicado com a replicação nativa do postgres, onde no
>> slave para dividir a carga nas consultas apontei alguns sistemas que só
>> fazem selects (nada de inserts, updates).
>>
>> Agora no log do Slave está aparecendo as seguintes mensagens:
>>
>>
>>
>> 2014-09-05 09:48:11 BRT [12271]: [1-1] user=postgres,db=base FATAL:
>>   terminando conexão por causa de um conflito com recuperação
>> 2014-09-05 09:48:11 BRT [12271]: [2-1] user=postgres,db=base DETALHE:
>>   Consulta do usuário pode ter precisado acessar versões de registros
>> que devem ser removidas.
>> 2014-09-05 09:48:11 BRT [12271]: [3-1] user=postgres,db=base DICA:
>>   Dentro de instantes você poderá conectar novamente ao banco de dados e
>> repetir seu commando.
>> 2014-09-05 09:48:11 BRT [12286]: [8-1] user=postgres,db=base ERRO:
>>   cancelando comando por causa de um conflito com recuperação
>> 2014-09-05 09:48:11 BRT [12286]: [9-1] user=postgres,db=base DETALHE:
>>   Consulta do usuário pode ter precisado acessar versões de registros
>> que devem ser removidas.
>>
>>
>> Fiz uma procura rapida no google, mas não tive muito sucesso. Vocês já
>> passaram por isto alguma vez?
>>
>
> Você não disse a versão.
> Isso ocorre porque uma tupla não necessária ao mestre e que foi removida
> por uma passagem do autovacuum é necessária à consulta no escravo.
> Para evitar isso, ligar a configuração "hot_standby_feedback" no escravo.
> Isso está disponível a partir da versão 9.1. Na versão 9.0 existem algumas
> estratégias possíveis.
>
> []s
> Flavio Gurgel
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 

José Ariel Ferreira Alves
arielalves...@gmail.com
ariel.al...@msn.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] REF: RETORNO DE SALDO - WINDOW FUNCTION

2014-09-05 Thread Paulo
Show de bola, muito bom mesmo, exatamente o que eu precisava.

Obrigado Mateus e Emerson pelas preciosas dicas.

 

Att,

 

Paulo.

 

 

2014-09-04 23:21 GMT-03:00 Paulo Pereira :

 

Tenho duas tabelas: Tabela Saldos das Contas e Tabela Saidas. EX:
TABELA SALDOS:
CONTA|SALDO
200  | 200.00
201  | 500.00

Tenho o seguinte sentença que me retorna a soma das contas, como segue:
SELECT row_number() OVER(PART BY conta ORDER BY conta,valor),
setor,
valor,
conta,
SUM(valor) OVER(PART BY conta ORDER BY conta,valor) as Total
FROM saidas
ORDER BY conta.

RETORNO:
1-1-200-50.00-50.00
2-1-200-60.00-110.00
3-1-200-50.00-160.00
1-1-201-80.00-80.00
2-1-201-40.00-120.00
3-1-201-30.00-150.00

Preciso buscar o saldo de cada conta da tabela saldos para ficar assim:
SALDO  200.00
1-1-200-50.00-250.00
2-1-200-60.00-310.00
3-1-200-50.00-360.00
SALDO  500.00
1-1-201-80.00-580.00
2-1-201-40.00-620.00
3-1-201-30.00-650.00

Alguem pode dar uma dica ?

 

Eu faria usando UNION ALL, da seguinte forma:


SELECT 1 AS tipo,
NULL::bigint,
NULL::integer AS setor,
NULL::numeric AS valor,
conta,
saldo AS Total
FROM saldo
UNION ALL
SELECT 2 AS tipo,
row_number() OVER(PARTITION BY conta ORDER BY valor),
setor,
valor,
conta,
SUM(valor) OVER(PARTITION BY conta ORDER BY valor) as Total
FROM saidas
ORDER BY conta, tipo, valor


Assim, na aplicação você só itera os registros (que já virão ordenados), quando 
tipo for 1 é "saldo", quando tipo for 2 é "conta".

 

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