Re: [pgbr-geral] Nova lista PGBR

2018-04-19 Por tôpico Arthur Nascimento
2018-04-19 10:17 GMT-03:00 Rafael Fialho :
> Eu tenho filtros com todas as condições possíveis e não estão funcionando..
> o valor do campo seria "pgsql-pt-geral"?

No gmail tem uma ação um pouco escondida "filtrar mensagens como esta".

Selecionando ela, o gmail abre o formulário de criar filtros com o
campo "inclui as palavras" já preenchido com:
 list:"pgbr-geral@listas.postgresql.org.br"
ou
 list:"pgsql-pt-ge...@lists.postgresql.org"
(o que filtra pelo campo List-Id do cabeçalho das mensagens SMTP).

Recomendo usar esse método em vez de inventar o filtro por conta própria.

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

Re: [pgbr-geral] Campo calculado

2018-04-18 Por tôpico Arthur Nascimento
2018-04-18 8:29 GMT-03:00 Rogério Martins :
> 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.

Sim. A longo prazo, o que você procura é GENERATED COLUMNS, que está
no padrão SQL. Infelizmente não vai entrar nem na v11, mas quem sabe
no futuro. Recomendo dar uma lida na thread de e-mail daqui: [1]

Mas além dos triggers que já disseram aqui, tem um outro truque
abusando da resolução de funções no postgres. É descrito na primeira
resposta da thread principal da feature.

[1] https://commitfest.postgresql.org/17/1443/


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

Re: [pgbr-geral] Update em campo do tipo date array

2018-01-16 Por tôpico Arthur Nascimento
2018-01-16 13:15 GMT-02:00 Edelson Regis de Lima :
> Boa tarde pessoal.
>
> Estou apanhando um pouco para dar um Replace em uma data dentro de um campo
> do tipo date[]


Use array_replace(), array_remove() e todas as outras opções para
trabalhar diretamente com arrays. Não fique convertendo para texto.


https://www.postgresql.org/docs/current/static/functions-array.html



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

Re: [pgbr-geral] Comparação de imagens

2017-11-13 Por tôpico Arthur Nascimento
On Mon, Nov 13, 2017 at 8:37 AM Artur Zanini  wrote:

> Eu preciso comparar 200K fotos dividas em 4 tabelas. Precisos descobrir
> fotos que possivelmente podem ser iguais, talvez uma acurácia de 90%
> Alguma sugestão?
>

Tente isso: https://github.com/postgrespro/imgsmlr

-- 

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

Re: [pgbr-geral] Remover caracteres escondido

2017-08-18 Por tôpico Arthur Nascimento
On Fri, Aug 18, 2017 at 11:03 AM Zan  wrote:
Douglas, no meu caso não deu certo. Este bendito caractere
(\342\200\213) é uma "?".

Acho que o que você quer é esconder os caracteres não imprimíveis da saída:
  select regexp_replace(atributo, '[^[:print:]]', '') from tabela;

-- 

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

Re: [pgbr-geral] Configuração de Máquina

2017-07-10 Por tôpico Arthur Nascimento
>> Nesse ponto eu prefiro centos/rhel (pela documentação e suporte da
>> RH)

> Lembrando que a Red Hat não suporta o CentOS, e que além da comunidade
> há várias empresas que suportam Debian — o que vale também para os
> *BSDs, em menor grau.

Não diretamente, mas você consegue colocar a subscription num centos, fazer
uma troca dos repositórios e reinstalar os pacotes relevantes (não precisa
nem trocar todos). Se mostrar para eles que no final o sistema sofre do
mesmo problema com os pacotes deles, eles seguem o case e resolvem o
problema. Só não anunciam porque não vale a pena para eles seguir esse
caminho longo; mas é possível e te economiza subscriptions enquanto o
centos não der problema.

>> (Pessoalmente eu prefiro distros source based e rolling release, mas
>> profissionalmente é outra história.)

> O Debian testing funciona como atualizações contínuas (/rolling
> release/), e todas as livres (o que exclui o Red Hat) são baseadas em
> código-fonte — mas as que compilam na instalação dão uma dor de cabeça
> pequena, mas ainda desproporcional aos benefícios, esses sim ínfimos.
> De qualquer maneira, em produção quer-se estabilidade, o que exclui
> atualizações contínuas.

Sim, é fato bem conhecido que não vale a pena compilar o sistema inteiro em
cada instalação. Mas em praticamente toda distro source based também tem
como compilar uma vez e disponibilizar os binários em um repositório
privado (ou mesmo público, mas não-oficial). Fiz bastante disso em clusters
HPC, em que qualquer pequeno ganho é importante. Compila uma vez e usa em
centenas de nós. Mas isso já faz tempo. Hoje só tenho poucas máquinas
parecidas na nuvem, mas pessoalmente os benefícios de manter elas ainda são
bem grandes para mim: eu fico sempre atualizado com release notes e
changelogs dos pacotes que mais me afetam; às vezes encontro bugs, reporto
e tento corrigir. É divertido também. Mas como eu disse antes,
profissionalmente, recomendo centos e rhel, dependendo de cada caso.

BTW, sabe que as fontes da red hat são públicas, certo? Não são livres no
sentido legal, mas públicas sim, estão no ftp da red hat e qualquer um pode
baixar. Os binários é que não são nem públicos e menos ainda livres. Não
sei bem o que você quis dizer excluindo a red hat, então só comentei para
não faltar.

-- 

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

Re: [pgbr-geral] Configuração de Máquina

2017-07-10 Por tôpico Arthur Nascimento
>> * vocês sabem qual a melhor distribuição Linux usar para o
>> postgresql.

A melhor é aquela que você (ou a sua equipe) domina. É difícil ser melhor
que isso, já que a distro não faz nada por si só.
Em segundo lugar, olhe também para a política de atualizações de cada uma:
bugfixes críticos precisam chegar em questão de poucas horas nas máquinas
de produção e, quando possível, automaticamente; enquanto que atualizações
com features novas ou mudanças maiores precisariam passar por
aprovação/homologação/validação/etc de vocês. Se a distro não tiver
políticas desses dois casos bem definidas você (na verdade a sua empresa)
vai estar correndo riscos em um ou nos dois lados. Nesse ponto eu prefiro
centos/rhel (pela documentação e suporte da RH), mas muita gente apoia
debian/ubuntu. E BSDs são excelentes também, mas eu conheço bem menos
deles. (Pessoalmente eu prefiro distros source based e rolling release, mas
profissionalmente é outra história.)

>> * temos que nos preocupar com mais alguma coisa?
> Muitas. Bases de dados não são triviais. [...]

Muitas mesmo. Anos atrás eu encontrei o PostgreSQL High Performance 9.0 do
Gregory Smith. Os primeiros capítulos descrevem em muitos detalhes todos os
aspectos importantes nessa escolha (memória, processamento, I/O, benchmarks
etc), então eu recomendo muito ele como um começo. Parece que esse ano saiu
a versão atualizada para o 9.6, que eu não li ainda, mas se seguir a linha
da anterior, então vale a pena o investimento.

Boa sorte,
-- 

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

Re: [pgbr-geral] PostgreSQL com Docker

2017-07-08 Por tôpico Arthur Nascimento
04.07.2017, 20:18, "Lucas Viecelli" :
> Alguém utiliza o PostgreSQL com Docker em um ambiente de produção?

Tenho alguns serviços ainda com docker em produção, mas me arrependi disso
já faz tempo e estou gradualmente mudando isso.

O docker tem vários problemas com algumas coisas que são importantes para
os meus ambientes (mas talvez não seja para o seu), como selinux (exigido
por algumas auditorias) e ipv6. Mesmo nas coisas mais simples, ele consegue
causar mais trabalho do que resolve, como quando embaralha as regras dos
meus firewalls para fazer o NAT funcionar no bridge entre os containers (o
que é tudo completamente desnecessário quando usando ipv6, se ele usasse
endereços do escopo certo para redes locais: link-local e realm-local, por
exemplo). E quando ele tenta mapear volumes inteiros na memória virtual do
dockerd (se eu não me engano, ele faz um monte de mmap MAP_PRIVATE, sob
copy-on-write, que precisa de espaço caso aconteça o write) e falha com
"falta de memória" por causa do overcommit_memory=2 (mesmo com muitos GBs
efetivamente livres na RAM) não é legal. 

E isso eu nem falei dele com o Postgres ainda. Concordando com o Leonardo e
indo mais além, eu também preciso fazer muitas configurações de kernel para
memória, rede e outros I/Os variados (parâmetros de SAN, por exemplo) nos
servidores de banco de dados. E não dá para fazer isso só com o docker (nem
com swarm+machine, se eu não me engano). Pior que isso, alguns parâmetros
do Postgres atrapalham o docker e vice-versa (exemplo foi o
overcommit_memory, que me obrigou a colocar swap desnecessariamente
exagerados só para conseguir fazer o docker-pull de imagens gordas; também
tem outro de ipv6 que eu não lembro agora). E tem inicialização de
clusters, de tablespaces, configurações de replicação, de backup etc.

Basicamente a única utilidade de um Postgres em docker seria para entregar
o executável cru porque todo o resto precisaria ser feito por fora dele. E
já que essa é a situação, então um repositório rpm/deb/apk junto com
systemd/upstart faz isso melhor que o docker hoje em dia para ambiente
produtivo. E as configurações externas viriam de um ansible/chef/puppet,
que fica mais adequado para isso mesmo. Então recomendo algo parecido com o
que o Leonardo disse: colocar o banco em uma (ou mais, claro) máquina
própria, bare metal ou virtualizada. E deixar o docker só para as outras
partes da sua solução, em máquinas diferentes. É o que eu tenho feito
ultimamente, depois de passar pelo vale de desilusão do hype (mas admito
que a mão está coçando para ir para o próximo hype e substituir os meus
dockers por rkt).

Agora, se a conversa for sobre ambientes para testes, então o docker pode
ajudar bastante. Criar um container com o Postgres, já com um cluster
interno inicializado e com um banco de dados carregado com dados de testes
ajuda muito os desenvolvedores que souberem colocar a aplicação deles em um
container e subir os dois localmente por um docker-compose. Mas desses dois
containers, eu só levaria o da aplicação para produção, se muito.

Boa sorte,
-- 

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

Re: [pgbr-geral] RES: SQL Select

2017-06-23 Por tôpico Arthur Nascimento
>Em 23/06/2017, Ricardo escreveu:
>> Usando select não vou conseguir, vou trabalhar com um função para seguar
>> nesse resultado abaixo.

Consegue sim. Você pode usar a window function lag() para acessar dados de
janelas passadas. Mas...

On Fri, Jun 23, 2017 at 1:31 PM Osvaldo Kussama 
wrote:
> Mas isto tem algum sentido?

...concordo que está parecendo estranho. Melhor parar e pensar no resultado
que você quer alcançar antes de continuar tentando escrever o select na
tentativa-e-erro.
-- 

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

Re: [pgbr-geral] RES: SQL Select

2017-06-23 Por tôpico Arthur Nascimento
On Fri, Jun 23, 2017 at 9:55 AM Ricardo  wrote:
> Na verdade vou precisar que me retorne o saldo de cada mês ficando assim

Assim é mais tranquilo ainda porque nem precisa de window function;
aggregate function já resolve:

#select teste.mes, sum(v_entrada) as entrada, sum(v_saida) as saida,
sum(v_entrada) - sum(v_saida) from teste group by mes order by 1;
 mes | entrada | saida | ?column?
-+-+---+--
   1 | 100 |   200 | -100
   2 | 150 |   230 |  -80
   3 | 200 | 0 |  200
(3 rows)

-- 

Arthur Nascimento - tureba
___
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 Select

2017-06-22 Por tôpico Arthur Nascimento
On Thu, Jun 22, 2017 at 3:10 PM Ricardo  wrote:
> Estou quebrando a cabeça aqui pra criar um select que calcule o Resultado
de entrada e saída da tabela abaixo sem tem que criar uma função. Será
possível ?

Sim, com uma window function:

#select teste.*, sum(v_entrada) over w - sum(v_saida) over w from teste
window w as (partition by teste.mes);
 tipo | mes | v_entrada | v_saida | ?column?
--+-+---+-+--
 E|   1 |   100 |   0 | -100
 S|   1 | 0 | 200 | -100
 E|   2 |   150 |   0 |  -80
 S|   2 | 0 | 230 |  -80
 E|   3 |   200 |   0 |  200
 S|   3 | 0 |   0 |  200
(6 rows)


Essa apresentação sobre window functions do Bruce Momjian é uma leitura
adicional muito boa: https://momjian.us/main/writings/pgsql/window.pdf


-- 

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

Re: [pgbr-geral] Agrupar bancos de dados replicado num único Banco

2017-06-22 Por tôpico Arthur Nascimento
On Tue, Jun 20, 2017 at 7:26 PM Ivanelson Nunes 
wrote:
> Então como juntar esses bancos num único banco? E claro mantendo a
consistência e o dado sempre atualizado.

Qual a sua intenção por trás desse "juntar"? Se quiser que os dados estejam
replicados em um local só, os outros ramos desta thread já falam de opções
boas sobre replicação lógica.

Mas também tem a chance de você só estar querendo que eles estejam
*acessíveis* através de um banco único. Se for só isso, fica até mais
simples: faça um banco novo, um schema para cada loja, sendo que cada um
contém foreign tables para as respectivas tabelas dessas suas replicações
locais.

Assim você consegue consultar em um banco só loja1.tabela1, loja1.tabela2,
... loja2.tabela1, loja2, tabela2
Em cima disso eu criaria visões com union all para ajudar as suas
consultas, assim as tuplas ficam todas "juntas" e marcadas com as suas
respectivas procedências:
create view public.tabela1 as
  select 'loja1', tabela1.* from loja1.tabela1
union all
  select 'loja2', tabela1.* from loja2.tabela1
union all
  

Ajuste os nomes dos schemas adequadamente se tiver mais de um sendo usado
nas lojas e/ou se não estiver usando o public. E visões materializadas
podem ser úteis também.

Boa sorte
-- 

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

Re: [pgbr-geral] Regressão linear, derivadas no postgres

2017-05-08 Por tôpico Arthur Nascimento
Você provavelmente está querendo o MADlib:
https://madlib.incubator.apache.org/

Pessoalmente eu nunca usei, mas a documentação é boa. Por exemplo, a página
falando de regressão linear:
https://madlib.incubator.apache.org/docs/latest/group__grp__linreg.html#examples

Boa sorte



On Mon, May 8, 2017 at 4:16 PM Artur Zanini  wrote:

> Boa tarde, pessoal.
>
> Alguém pode indicar exemplos e material como o postgres trabalha Regressão
> linear.
>
> Funções matemáticas para Data Mining.
>
> Alguém já trabalhou com Data Mining usando o Postgis?
>
>
> Desde já agradeço.
>
> =
> Ass.:
> Artur Gnecco Zanini
> Fone.:  51 92232129 <(51)%209223-2129>
> Gtalk: artur.zan...@gmail.com
> =
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

-- 

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

Re: [pgbr-geral] Arredondamento

2017-03-13 Por tôpico Arthur Nascimento
On Mon, Mar 13, 2017 at 10:14 AM Leandro Guimaraens Faria Corcete DUTRA <
l...@dutras.org> wrote:

Le lun. 13 mars 2017 à 9:55, Flavio Henrique Araque Gurgel
 a écrit :
>>
>> > Porém estão me pedindo para arredondar para acima somente
>> > quando for acima de 5, por exemplo:
>>
>> Essa mesma é a definição e o exemplo de round ():
 >
> Eu também levei um minuto pra entender.
> O OP precisa no exemplo que o valor na próxima casa após o
> arredondamento seja "acima de 5".


Parece que o OP quer o arredondamento [1] "half down" ou o "half towards
zero", enquanto que o round() implementa o "half away from zero" para
numeric e "half to even" para ponto flutuante [2]. Talvez fosse
interessante que a doc do round() explicasse melhor o "nearest integer"
porque a Wikipedia fala de 6 opções diferentes de "nearest integer" e quem
chega em [3] procurando essa função não percebe com facilidade que deveria
ler junto com o último parágrafo de 8.1.2 [2].

[1] https://en.wikipedia.org/wiki/Rounding#Comparison_of_rounding_modes
[2]
https://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL
[3] https://www.postgresql.org/docs/current/static/functions-math.html

-- 

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

Re: [pgbr-geral] ORDER BY errado

2016-12-15 Por tôpico Arthur Nascimento
>
> Ou:
> alter collation "pt_BR" set variant to 'shifted';
>

Pensando melhor, esqueça o alter, que era uma péssima ideia por várias
razões, e considere algo como:
create database foobar lc_collate = "pt_BR-ka-shifted.UTF8" template
"template0";

Aí sim faria sentido.
-- 

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

Re: [pgbr-geral] ORDER BY errado

2016-12-15 Por tôpico Arthur Nascimento
>
> Alguém sabe porque o comportamento natural deste encoding já não é este?



O padrão Unicode estabelece inicialmente que espaços e pontuação têm esse
comportamento nas comparações [1] em todas as línguas - não só no
português. Teste com outras línguas e vai ver o mesmo resultado:
select * from teste2 order by nome collate "en_US";

Mas ele também dá diversos parâmetros para customizarmos os resultados. Por
exemplo, as variantes "shifted" e "noignore" devem resolver a questão.
Infelizmente o Postgres não nos dá acesso a nenhuma variante, então teste
pela linha de comando colocando um arquivo de texto com aqueles nomes e
ordenando:


% LC_COLLATE=pt_BR sort http://unicode.org/reports/tr10/
[2] http://unicode.org/faq/collation.html
[3] http://unicode.org/reports/tr35/tr35-collation.html
<http://www.unicode.org/reports/tr35/tr35-collation.html>
[4] http://unicode.org/reports/tr35/

Até mais,
-- 

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

Re: [pgbr-geral] Plpgsql function Postgres 9.5

2016-12-15 Por tôpico Arthur Nascimento
>
> Consegui resolver da seguinte forma:
>
> BETWEEN
> ''' || date_start || '''
> AND
> ''' || date_end || '''
>


Não, nunca concatene dados para formar comandos (especialmente do lado da
aplicação). É assim que sql injections nascem e você só descobre quando já
é tarde demais. Mas se você insistir nisso, então pelo menos use a função
quote_nullable (ou pode usar quote_literal se tiver alguma garantia de not
null na origem do dado, como é o caso de date_start):

 [...] BETWEEN ' || quote_literal(date_start) || ' AND ' ||
quote_nullable(date_end) || ' [...]

Mas o que você realmente quer é colocar essas variáveis na cláusula USING
do EXECUTE [1]:

EXECUTE $ex1$ COPY ( [...] WHERE logtime BETWEEN $1 and $2 ) [...]
$ex1$ USING date_start, date_end;

Ou com format [2]:

EXECUTE format($fmt1$ COPY ( [...] WHERE logtime BETWEEN %L AND %L
[...] $fmt1$, date_start, date_end);

E domine o dollar quoting [3], que é o recomendado [4], assim você não se
perde em blocos grandes e aninhados e tudo fica mais legível.

[1]
https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
[2]
https://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-FORMAT
[3]
https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING
[4]
https://www.postgresql.org/docs/current/static/plpgsql-development-tips.html#PLPGSQL-QUOTE-TIPS

Boa sorte
-- 

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