[pgbr-geral] Calculo de horas na query de auditoria

2009-07-30 Thread emerson hermann
Ola Lista!

Tenho que auditar uma base de dados, e estou com o seguinte problema:

Como fazer uma query para  o calculo (diferença entre entrada e saida
do usuario)   data e hora de entrada e de saida do usuario no sistema
conforme modelagem abaixo?

Desenvolver uma Store Procedure seria a melhor solucao ?

Segue estrutura exemplo da base de dados, abaixo:

-- Versao do PostgreSQL
SELECT VERSION();
 PostgreSQL 8.3.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2

-- Estrutura da Tabela

tb_log_acessos  
id_acesso   integer not null default
nextval('tb_log_acessos_id_acesso_seq'::regclass)
fk_usuario  integer 
login   character varying(77)   not null
fk_cliente  integer 
datatimestamp without time zone default now()
tipocharacter(1)

Índices:
"tb_log_acessos_pkey" PRIMARY KEY, btree (id_acesso)
Restrições de verificação:
"define_entrada_saida" CHECK (tipo = ANY (ARRAY['E'::bpchar, 'S'::bpchar]))
Restrições de chave estrangeira:
"tb_log_acessos_fk_cliente_fkey" FOREIGN KEY (fk_cliente)
REFERENCES tb_clientes(id_cliente) ON DELETE RESTRICT
"tb_log_acessos_fk_usuario_fkey" FOREIGN KEY (fk_usuario)
REFERENCES tb_usuarios(id_usuario) ON DELETE SET NULL

-- listagem dos dados
SELECT *
   FROM tb_log_acessos;

id_acesso | fk_usuario | login | fk_cliente | data | tipo
10312   1   bug 1   01/06/2007 03:29:28  E
10315   1   bug 1   01/06/2007 03:31:32  S
74929   1   bug 1   01/10/2007 02:59:02  E
74930   1   bug 1   01/10/2007 02:59:35  S
40171   1   bug 1   02/08/2007 10:44:37  E
40172   1   bug 1   02/08/2007 10:48:09  S
24340   1   bug 1   03/07/2007 03:30:01  E
24344   1   bug 1   03/07/2007 03:32:44  S
24345   1       bug 1   03/07/2007 03:33:06  E

Cordialmente,

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


[pgbr-geral] AGE FORMATADO

2009-11-10 Thread emerson hermann
Pessoal,

Tenho o seguinte problema:

SELECT age('01/11/2009','01/12/2008');

O problema é como formatar para o resultado sairem em quantidade
(totais) de meses? Exemplo:

SELECT to_char(age('01/11/2009','01/11/2008'),'MM-YY');
Resultado:
00-01

Se colocar dessa forma:

SELECT to_char(age('01/11/2009','01/11/2008'),'MM');
Resultado:
00

Conclusão o resultado, isto é, o total de meses zera após um 1 ano, e
a intenção é lista o total de meses.

Desde já agradeço.

Cordialmente,

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


[pgbr-geral] AGE FORMATADO

2009-11-11 Thread emerson hermann
Olá Pessoal

Também conseguir fazer dessa forma porem a forma que o Marcone mostrou
tem o desempenho melhor.

 SELECT (cast(substr(a.meses_anos,4) AS integer)*12) +
(cast(substr(a.meses_anos,1,2) AS integer)) AS meses
  FROM (
SELECT to_char(age('01/11/2010','01/12/2008'),'MM-')
AS meses_anos
   ) AS a;

A segunda opção desenvolvida por Marcone tem melhor desempenho.

select extract(month from (age('01/11/2010','01/12/2008'))) + (12 *
extract(year from (age('01/11/2010','01/12/2008'

Espero contribuir mais vezes.

Desde já agradeço a Marcone e a Lista.


Sem stress

Cordialmente

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


[pgbr-geral] Gatilho de comandos DDL no Postgres

2009-12-28 Thread emerson hermann
Olá Pessoal,

Gatilho de comandos DDL no Postgres, alguém tem material ou site, dica
sobre este assunto.

A idéia é monitorar toda criação/alteração de estrutura no banco
gravando em tabela os seguintes dados usuário, data e hora, comando
DDL executado.

Exemplo:
usuario data_horacomando_ddl
bug   2009-12-28 11:08DROP table financeiro.contas_a_receber;

Já vi um artigo falando sobre gatilho de comandos DDL em SQL Server
2005, na revista Sql Magazine.

Estou tentando fazer algo semelhante com Postgres, alguém tem alguma dica ?


Desde já agradeço.

Cordialmente,

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


Re: [pgbr-geral] Digest pgbr-geral, volume 35, assunto 94

2010-01-22 Thread emerson hermann
Olá André

O PostgreSQL tem suporte a gatilhos e store procedures que vc pode
desenvolver com várias opções de  linguagens(PLs) Pl-pgSQL,  Pl-Java,
Pl-Perl, Pl-Tcl, Pl-PHP, C,  e outras,  e isso  já faz muito tempo,
além do qual não deixa nada a dever ao DB2, Oracle, MSSQL ou qualquer
outro SGBD do mercado.

Referente a Microsiga homologar  para apenas 10 usuarios,  isso é
antigo também, e foi tomodado como base PostgreSQL 7.x com emulação
para Windows, na época não havia PostgreSQL para Windows, a solução
era emular no Windows usando CYGWIN, então o desempenho não era muito
bom já que era emulado, por isso a Microsiga recomendou para apenas
até 10 usuarios. Hoje isso mudou, e o PostgreSQL  que era bem maduro
no universo Unix/Linux hoje também amadureceu no universo Windows
também.

O problema é que a Microsiga, não é muito admiradora do software
livre,  e não atualiza as suas homologações no que se refere a banco
de dados livres e em especial ao PostgreSQL.

Bom  já que vc tem Topconect da Microsiga, (usando DB2), se não
existir nada customizado (especifico) para DB2, creio que não terá
stress ao usar o PostgreSQL 8.4 (a mais atual) seja com SO Linux,
Windows ou  Solaris.

Hoje o PostgreSQL dispensa apresentações e usada por varias empresas
no mundo e aqui no Brasil vou citar duas micro empresas: Caixa
Economica Federal e a Universidade Federal da Rio Grande do Norte.

Referente a cursos na sua região não sei informar.

Cordialmente,

Emerson Hermann




>
>   1. Microsiga Prrotheus 10 - Stored Procedure (Informática GMAIL)
>
>
> --
>
> Message: 1
> Date: Fri, 22 Jan 2010 08:47:46 -0200
> From: Informática GMAIL 
> Subject: [pgbr-geral] Microsiga Prrotheus 10 - Stored Procedure
> To: "'Comunidade PostgreSQL Brasileira'"
>        
> Message-ID: <01ed01ca9b50$575afc30$0610f4...@com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Bom dia pessoal tudo bem?
>
> Essa é o meu primeiro e-mail para a lista, mas já acompanha a algum tempo e
> agora surgiu uma necessidade e preciso da ajuda da comunidade.
> Hoje aqui na empresa que trabalho, tenho ERP Microsiga Protheus 8.11 R4 e a
> partir de fevereiro/2010 estou migrando para o Protheus 10 R3 com banco de
> dados DB2 (que foi nos vendido na época como sendo o melhor banco de dados e
> por falta de conhecimento acabamos aceitando), mas venceu a “validade” do
> DB2 e estamos tendo de ou comprar a versão nova do DB2 ou MS SQL Server ou
> partir para algum banco FREE, ai que surgiu a idéia de colocar PostgreSQL
> que pelo que vi é muito bom.
>
> É isso que quero pedir a opinião de vocês, pelos testes que fiz aqui, o
> Protheus 10 rodou legal com o PostgreSQL, mas tem a historia de que a
> Microsiga homologa para apenas 10 usuarios, mas aqui utilizamos mais e ficou
> muito bom.
> Foi nos dito também que o PostgreSQL não tem Stored Procedure isso é
> verdade?
>
> Como surgiu essa idéia, também surgiu a idéia de se fazer um curso de
> PostgreSQL aqui em Campinas-SP (moro em Valinhos-SP) na Dextra, alguém
> conhece essa escola? É boa? Vale a pena fazer esse curso de PostgreSQL?
>
> Se alguém puder comentar sobre esse assunto, ou se tem PostgreSQL rodando
> com o Protheus 10 eu agradeço antecipadamente.
>
> Meu MSN é alm...@hotmail.com e skype andre-valinhos.
>
> Obrigado a todos
>
>
> Atenciosamente
>
> André Luiz Moro
> Analista de Informática
> É  19-3881-8000
> Ê  19-3881-8009
> È 19-9684-8644
> skype: andre-valinhos
> MSN messenger: alm...@hotmail.com
>  <http://www.filtracom.com.br/> www.filtracom.com.br
> QUALIDADE GERA QUALIDADE
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Delete *

2010-07-28 Thread Emerson Hermann
/*
Gostei da dica da store function exclusao de JotaComm
Baseado nas mesma function incrementei algumas funcionalidades.
*/

DROP FUNCTION IF EXISTS public.exclusao(esquema_tabelax VARCHAR(255),
campox VARCHAR(255), idx INTEGER);
CREATE OR REPLACE FUNCTION public.exclusao(esquema_tabelax
VARCHAR(255), campox VARCHAR(255), idx INTEGER)
RETURNS BOOLEAN AS $$

DECLARE

  ds_comando   TEXT;
  deletado BIGINT;

BEGIN

 IF (esquema_tabelax IS NULL) THEN
  RAISE EXCEPTION 'ESQUEMA TABELA COM VALOR NULO!'; -- caso o
parametro venha nulo
 END IF;

 IF (campox IS NULL) THEN
  RAISE EXCEPTION 'CAMPO COM VALOR NULO!'; -- caso o parametro
venha nulo
 END IF;

 IF (idx IS NULL) THEN
  RAISE EXCEPTION 'ID COM VALOR NULO!'; -- caso o parametro venha nulo
 END IF;


 ds_comando := 'DELETE FROM ' || esquema_tabelax || ' WHERE '
|| campox || '=' || idx;

EXECUTE ds_comando;

GET DIAGNOSTICS deletado = ROW_COUNT;

IF deletado > 0 THEN

RAISE NOTICE '%', ds_comando;
RAISE NOTICE 'Total de registro(s) deletado(s): %',deletado;
RETURN TRUE;

END IF;

 RAISE NOTICE '%', ds_comando;
 RAISE NOTICE 'Total de registro(s) deletado(s): %',deletado;
RAISE NOTICE 'O registro % não foi encontrado. NADA FOI 
DELETADO!!.',idx;
RETURN FALSE;

END;
$$ LANGUAGE 'plpgsql' RETURNS NULL ON NULL INPUT
;
___
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 que retorne somente colunas que comecem com tais caracteres

2010-10-01 Thread Emerson Hermann
Usando os catalogos do Postgres ... eu faria assim:

   SELECT *
 FROM
(
 SELECT
 b.esquema
   , b.tabela
   , b.oid_tabela
   , b.registros
   , a.attname AS "nome_atributo"
   , pg_catalog.format_type(a.atttypid,
a.atttypmod) AS "formato_tipo_atributo"
   , a.attnotnull AS "nao_nulo"
   , a.attnum AS "ordem_atributo_tabela"
   ,
pg_catalog.col_description(b.oid_tabela, a.attnum) AS
"comentario_coluna"
   , (
   SELECT
SUBSTRING(pg_catalog.pg_get_expr(d.adbin, d.adrelid) FOR 128)
 FROM pg_catalog.pg_attrdef d
WHERE d.adrelid = a.attrelid
  AND d.adnum = a.attnum
  AND a.atthasdef
 ) AS padrao
   FROM (
 SELECT c.oid AS "oid_tabela",
c.relname AS "tabela",
n.nspname AS "esquema",
reltuples::integer AS "registros"
   FROM pg_catalog.pg_class c
  LEFT JOIN pg_catalog.pg_namespace n
 ON n.oid = c.relnamespace
  WHERE c.relkind = 'r' -- r =
ordinary table, i = index, S = sequence, v = view, c = composite type,
t = TOAST table
AND n.nspname NOT IN
 (
   'pg_catalog',
   'information_schema',
   'pg_toast'
 )
   ORDER BY reltuples::integer DESC
) AS b
 INNER JOIN pg_catalog.pg_attribute a
 ON a.attrelid = b.oid_tabela
  WHERE 1=1
AND a.attnum > 0 -- despreza
'oid','cmax','xmax','cmin','xmin','ctid','tableoid'
AND NOT a.attisdropped  -- colunas excluidas
   ORDER BY b.registros DESC,
b.esquema ASC,
b.oid_tabela ASC,
ordem_atributo_tabela ASC
) AS vw_find_attrib
        WHERE nome_atributo ILIKE '%cod%'

Isso poderia ser transformado em uma view para facilitar, tipo:
SELECT * FROM vw_find_attrib WHERE nome_atributo ILIKE '%cod%';

Espero ter ajudado.


Emerson Hermann

Em 1 de outubro de 2010 10:56, Émerson Eng.  escreveu:
>
> Olá a todos postgreiros :)
>
> Há alguma expressão posta preferencialmente na cláusula SELECT que retorne
> somente colunas que comecem com tais caracteres?
>
> Para ilustrar:
>
> SELECT  tabela.cod* ...
>
> Isso traria todas as colunas que comecem com os caracteres cod.
>
>
>
> ___
> 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] Catalogo vinculo de tabela e sequencia

2010-10-04 Thread Emerson Hermann
Olá!

Alguém sabe em qual catálogo eu encontro a vinculação da sequencia com
a tabela, quando existe tal vinculação  ?

Tipo:
ALTER SEQUENCE nome_seq OWNED BY nome_tabela.id_coluna; -- definindo a
tabela / coluna dona da sequencia

Neste momento, como faço que para descobrir via catálogo a vinculação
do tabela com a sequencia, sem usar o pg_depend ?

Desde já agradeço

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


Re: [pgbr-geral] Catalogo vinculo de tabela e sequencia

2010-10-04 Thread Emerson Hermann
Obrigado Fabrizio e Oswaldo,  o pg_attrdef  sugerido por Oswaldo
resolveu o meu problema.
Emerson Hermann

Em 4 de outubro de 2010 16:03, Osvaldo Kussama
 escreveu:
> Em 4 de outubro de 2010 15:50, Emerson Hermann
>  escreveu:
>> Olá!
>>
>> Alguém sabe em qual catálogo eu encontro a vinculação da sequencia com
>> a tabela, quando existe tal vinculação  ?
>>
>> Tipo:
>> ALTER SEQUENCE nome_seq OWNED BY nome_tabela.id_coluna; -- definindo a
>> tabela / coluna dona da sequencia
>>
>> Neste momento, como faço que para descobrir via catálogo a vinculação
>> do tabela com a sequencia, sem usar o pg_depend ?
>>
>
>
> pg_attrdef
> http://www.postgresql.org/docs/current/interactive/catalog-pg-attrdef.html
>
> Osvaldo
> ___
> 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] Agrupar, transformar linhas em colunas

2010-10-28 Thread Emerson Hermann
/*
Estrutura apenas para exemplo
*/
--DROP TABLE IF EXISTS cadastro_teste;
CREATE TEMP TABLE cadastro_teste
(
   cpf  VARCHAR(11)
 , nome VARCHAR(21)
 , matricula VARCHAR(7)

);

INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
Madalena','72034054401','2010011');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
('Jonas','12034054408','2010032');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
Madalena','72034054401','2010051');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
Madalena','72034054401','2010071');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
('Jonas','12034054408','2010559');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
('Marcos','42034054403','2010033');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
('Marcos','42034054403','2010154');
INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
('Joao','53034054403','2010004');


SELECT * FROM cadastro_teste ORDER BY cpf;
/*

cpf|nome  |matricula
12034054408|Jonas |2010559
12034054408|Jonas |2010032
42034054403|Marcos|2010154
42034054403|Marcos|2010033
53034054403|Joao  |2010004
72034054401|Maria Madalena|2010071
72034054401|Maria Madalena|2010051
72034054401|Maria Madalena|2010011

*/

-- Existe a possibilidade de agrupar esses dados da forma abaixo
(concatenando a matricula) sem uso de store function? Utilizo
PostgreSQL 8.3.
-- Se existe, como seria, com window function  ?


/*
cpf|nome  |matricula
12034054408|Jonas |2010032;2010559;
42034054403|Marcos|2010033;2010154;
53034054403|Joao  |2010004;
72034054401|Maria Madalena|2010011;2010051;2010071;
*/
___
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, transformar linhas em colunas

2010-10-29 Thread Emerson Hermann
/*
Obrigado Osvaldo e JotaComm, ufa! como simplificou a minha vida, vejam
como fazia antes com store function  e de longe não era melhor solução
comparada com esta, desde já agradeço se  alguém quiser postar algum
exemplo com  window function
Veja como fazia com store function, como era sofrivel a minha vida :)
*/

--type do store function
DROP TYPE IF EXISTS public.tp_transform_rows_into_column CASCADE;
CREATE TYPE public.tp_transform_rows_into_column AS
(
  c1 TEXT
, c2 TEXT
, c3 TEXT
, c4 TEXT

);

--store function
DROP FUNCTION IF EXISTS sf_transform_rows_into_column (sqlx TEXT);
CREATE OR REPLACE FUNCTION sf_transform_rows_into_column (sqlx TEXT)
 RETURNS SETOF public.tp_transform_rows_into_column AS

$$
DECLARE
row1public.tp_transform_rows_into_column;
row2public.tp_transform_rows_into_column;
row3public.tp_transform_rows_into_column;
ds_comando  TEXT;
controleTEXT;
n_col_transf_rx TEXT;
n_contador  FLOAT;

BEGIN

 IF (sqlx IS NULL) THEN
  RAISE EXCEPTION 'QUERY VALORES NULOS!'; -- caso o parametro venha nulo
 END IF;

 n_col_transf_rx := '';
 ds_comando  := 'SELECT * FROM ( ' || sqlx || ' ) AS foo
ORDER BY 1 ASC, 3 ASC';
 controle:= '';
 n_contador  := 0;

 FOR row1 IN EXECUTE
  ds_comando

  LOOP

  IF row1.c1 <> controle THEN

   n_col_transf_rx := '';
   row2.c1 := row1.c1;
   row2.c2 := row1.c2;
   row2.c3 := row1.c3;
   row2.c4 := row1.c4 || ';';
   n_col_transf_rx := row1.c4 || ';';

  ELSIF  row1.c1 = controle  THEN

   n_col_transf_rx := n_col_transf_rx || row1.c4 ||
';';
   row2.c4 := n_col_transf_rx;

  END IF;

  IF row2.c1 <> row3.c1 THEN

   RETURN NEXT row3;

  END IF;

  controle:= row1.c1;
  row3:= row2;
  n_contador  := n_contador + 1;

  RAISE NOTICE 'Processando tupla... %', n_contador;

 END LOOP;

 RETURN NEXT row2;

 RAISE NOTICE 'Processo concluido com sucesso!!!';

 RETURN;

EXCEPTION WHEN QUERY_CANCELED THEN
 RAISE NOTICE 'Processo cancelado, ROLLBACK EFETUADO!!!';

 RETURN;

END;
$$
LANGUAGE 'plpgsql'
;
-- depois para execução
--como havia anteriormente feito
 SELECT *
   FROM sf_transform_rows_into_column
($$
 SELECT cpf
  , nome
  , 1 AS status
  , matricula
   FROM cadastro_teste ORDER BY cpf
$$);

-- com a versão sugerida por Osvaldo na versão PostgreSQL 8.3, ficou assim:
-- para versao Postgres 8.3
CREATE AGGREGATE array_accum (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);

SELECT cpf, nome, array_accum(matricula) FROM cadastro_teste GROUP BY
cpf, nome;  -- apenas na versao do Postgres 8.3

--Muito simples ! Show!
--Valeu !
/*
Emerson Hermann
DBA
*/

Em 29 de outubro de 2010 08:58, JotaComm  escreveu:
> Opa,
>
> 2010/10/28 Emerson Hermann 
>>
>> /*
>> Estrutura apenas para exemplo
>> */
>> --DROP TABLE IF EXISTS cadastro_teste;
>> CREATE TEMP TABLE cadastro_teste
>> (
>>       cpf  VARCHAR(11)
>>     , nome VARCHAR(21)
>>     , matricula VARCHAR(7)
>>
>> );
>>
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
>> Madalena','72034054401','2010011');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
>> ('Jonas','12034054408','2010032');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
>> Madalena','72034054401','2010051');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES ('Maria
>> Madalena','72034054401','2010071');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
>> ('Jonas','12034054408','2010559');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
>> ('Marcos','42034054403','2010033');
>> INSERT INTO cadastro_teste (nome,cpf,matricula) VALUES
>> ('Marcos','42034054403','2010154');
>> INSERT INTO cad

Re: [pgbr-geral] Quantidade usuários conectados

2010-10-29 Thread Emerson Hermann
SELECT COUNT(*) AS total
  FROM (
 SELECT
   DISTINCT client_addr
   FROM pg_stat_activity
) AS x

Em 29 de outubro de 2010 14:42, Avelino Brun  escreveu:
> Olá colegas!
>
> Existe alguma forma de saber quantos usuários existem conectados ao banco de
> dados?
>
> Obrigado
> Avelino
>
> ___
> 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] Quantidade usuários conectados

2010-10-29 Thread Emerson Hermann
SELECT COUNT(*) AS total
  FROM (
 SELECT
   DISTINCT usename
   FROM pg_stat_activity
) AS x

Em 29 de outubro de 2010 14:45, Emerson Hermann
 escreveu:
>        SELECT COUNT(*) AS total
>          FROM (
>                 SELECT
>               DISTINCT client_addr
>                       FROM pg_stat_activity
>                        ) AS x
>
> Em 29 de outubro de 2010 14:42, Avelino Brun  
> escreveu:
>> Olá colegas!
>>
>> Existe alguma forma de saber quantos usuários existem conectados ao banco de
>> dados?
>>
>> Obrigado
>> Avelino
>>
>> ___
>> 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] Ordenação equívoca do Postgres ?

2010-11-03 Thread Emerson Hermann
/*
Olá Pessoal,

Estou com um pequeno problema referente a ordenação do Postgres.

O moido é o seguinte conforme script abaixo em algumas aplicações como
Excel ou BrOffice o VICTOR LUIZ% vem antes de VICTORIA DE FATIMA% mas
no Postgres versão 8.3 com client e server com codificação UTF8 está
ordenando invertido ao menos no meu caso.

Observei que  o Postgres está ordenando levando em consideração a
remoção do espaço (space), então fiz um gambiarra  para resolver essa
situação que foi usar o translate no order by, porém alguem sugere uma
solução melhor ou poderia dizer o motivo de tal comportamento,
arquivos de configuração ou algo semalhante para resolver tal problema
?

OBS: Verifiquei que na versão do Postgres 8.4 e  9.0 não ocorre tal
comportamento.

Desde de já agradeço a colobaração de todos.

Cordialmente,

Emerson Hermann
DBA

*/
CREATE TEMP TABLE ord (
 nome VARCHAR(50)
);
INSERT INTO ord (nome) VALUES ('VICTOR LUIZ NOBREGA DIAS DE FERIADO');
INSERT INTO ord (nome) VALUES ('VICTORIA DE FATIMA FERREIRA DE LIMA');
INSERT INTO ord (nome) VALUES ('ABEL ARAUJO DOS SANTOS DE CARVALHO');

SELECT * FROM ord ORDER BY NOME ASC;

SELECT * FROM ord ORDER BY translate(nome,' ','0') ASC;
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Ordenação equívoca do Postgres ?

2010-11-03 Thread Emerson Hermann
pt_BR.UTF8

Em 3 de novembro de 2010 16:02, JotaComm  escreveu:
>
> Olá,
> Em 3 de novembro de 2010 16:54, Emerson Hermann 
> escreveu:
>>
>> /*
>> Olá Pessoal,
>>
>> Estou com um pequeno problema referente a ordenação do Postgres.
>>
>> O moido é o seguinte conforme script abaixo em algumas aplicações como
>> Excel ou BrOffice o VICTOR LUIZ% vem antes de VICTORIA DE FATIMA% mas
>> no Postgres versão 8.3 com client e server com codificação UTF8 está
>> ordenando invertido ao menos no meu caso.
>>
>> Observei que  o Postgres está ordenando levando em consideração a
>> remoção do espaço (space), então fiz um gambiarra  para resolver essa
>> situação que foi usar o translate no order by, porém alguem sugere uma
>> solução melhor ou poderia dizer o motivo de tal comportamento,
>> arquivos de configuração ou algo semalhante para resolver tal problema
>> ?
>
> Qual o locale do seu banco?
>
>>
>> OBS: Verifiquei que na versão do Postgres 8.4 e  9.0 não ocorre tal
>> comportamento.
>>
>> Desde de já agradeço a colobaração de todos.
>>
>> Cordialmente,
>>
>> Emerson Hermann
>> DBA
>>
>> */
>> CREATE TEMP TABLE ord (
>>     nome VARCHAR(50)
>> );
>> INSERT INTO ord (nome) VALUES ('VICTOR LUIZ NOBREGA DIAS DE FERIADO');
>> INSERT INTO ord (nome) VALUES ('VICTORIA DE FATIMA FERREIRA DE LIMA');
>> INSERT INTO ord (nome) VALUES ('ABEL ARAUJO DOS SANTOS DE CARVALHO');
>>
>> SELECT * FROM ord ORDER BY NOME ASC;
>>
>> SELECT * FROM ord ORDER BY translate(nome,' ','0') ASC;
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
> []s
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> ___
> 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] campo cpf

2010-11-08 Thread Emerson Hermann
/*
Eu uso bigint  sugerido por Oswaldo e na hora da apresentação uso
essas duas functions:
Detalhe não valida os cpf apenas mascara
*/

DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT);
CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT) RETURNS TEXT AS $$
--OBS: Essa function nao faz a validacao do CPF, apenas formata para o
modo texto.
DECLARE
cpf_text  TEXT;
BEGIN

 IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
|| CAST (cpf_bigint AS TEXT); -- efetua a conversao
 ELSE
cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
 END IF;

 RETURN cpf_text; -- Retorna CPF em formato texto

END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT) IS '
Autor: O Peregrino (emersonherm...@gmail.com)
Function que converte CPF em BIGINT para TEXT.
--OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
ultrapasse 11 digitos.
--Exemplo de uso:
--SELECT sp_formataCPF(848327462); -- resultado "00848327462"

'
;   


-- adotando polimorfismo da função sp_formataCPF

DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN);
CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT, mask
BOOLEAN) RETURNS TEXT AS $$
--OBS: Essa function nao faz a validacao do CPF, apenas formata para o
modo texto e adiciona o mascaramento.
DECLARE
cpf_text  TEXT;
BEGIN

 IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
|| CAST (cpf_bigint AS TEXT); -- efetua a conversao
IF mask THEN
  cpf_text := SUBSTRING(cpf_text FROM 1 FOR 3)
  || '.'
  || SUBSTRING(cpf_text FROM 4 FOR 3)
  || '.'
  || SUBSTRING(cpf_text FROM 7 FOR 3)
  || '-'
  || SUBSTRING(cpf_text FROM 10 FOR 2); -- faz o
mascaramento do cpf
END IF;
 ELSE
cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
 END IF;

 RETURN cpf_text; -- Retorna CPF em formato texto

END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN) IS '
Autor: O Peregrino (emersonherm...@gmail.com)
Function que converte CPF em BIGINT para TEXT com opcao para adicionar mascara.
--OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
ultrapasse 11 digitos.
--Exemplo de uso:
--SELECT sp_formataCPF(848327462,TRUE); -- resultado "008.483.274-62"
'
;   



Em 8 de novembro de 2010 16:50, Osvaldo Kussama
 escreveu:
> Em 8 de novembro de 2010 17:39, Marcone  escreveu:
>> No meu caso eu já uso o char, pq com campos numéricos não serão
>> guardados os zeros à esquerda. Se você for usar o mesmo campo para
>> armazenar CPF e CNPJ os zeros à esquerda podem transformar um CNPJ em
>> um CPF (verificações à parte). Eu já tive trabalho com isso e não
>> recomendo campos numéricos para CPF/CNPJ.
>>
>
>
> Creio que você está fazendo uma confusão entre o formato de
> armazenamento e o formato de exibição.
> O número 1 = 01 = 001 etc,  a cadeia de caracteres "1" realmente é
> diferente de "01" ou "001" mas tanto o CPF quanto o CNPJ são códigos
> numéricos, ou seja, zeros a esquerda não alteram seu significado.
>
> Osvaldo
> ___
> 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] campo cpf

2010-11-09 Thread Emerson Hermann
Legal! Vivendo e aprendendo...  :)

Em 8 de novembro de 2010 21:37, Osvaldo Kussama
 escreveu:
> Em 8 de novembro de 2010 18:14, Emerson Hermann
>  escreveu:
>> /*
>> Eu uso bigint  sugerido por Oswaldo e na hora da apresentação uso
>> essas duas functions:
>> Detalhe não valida os cpf apenas mascara
>> */
>>
>> DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT);
>> CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT) RETURNS TEXT AS 
>> $$
>> --OBS: Essa function nao faz a validacao do CPF, apenas formata para o
>> modo texto.
>> DECLARE
>>        cpf_text  TEXT;
>> BEGIN
>>
>>     IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
>>        cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
>> || CAST (cpf_bigint AS TEXT); -- efetua a conversao
>>     ELSE
>>        cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
>>     END IF;
>>
>>     RETURN cpf_text; -- Retorna CPF em formato texto
>>
>> END;
>> $$ LANGUAGE plpgsql;
>> COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT) IS '
>> Autor: O Peregrino (emersonherm...@gmail.com)
>> Function que converte CPF em BIGINT para TEXT.
>> --OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
>> ultrapasse 11 digitos.
>> --Exemplo de uso:
>> --SELECT sp_formataCPF(848327462); -- resultado "00848327462"
>>
>> '
>> ;
>>
>>
>> -- adotando polimorfismo da função sp_formataCPF
>>
>> DROP FUNCTION IF EXISTS sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN);
>> CREATE OR REPLACE FUNCTION sp_formataCPF (cpf_bigint BIGINT, mask
>> BOOLEAN) RETURNS TEXT AS $$
>> --OBS: Essa function nao faz a validacao do CPF, apenas formata para o
>> modo texto e adiciona o mascaramento.
>> DECLARE
>>        cpf_text  TEXT;
>> BEGIN
>>
>>     IF LENGTH(CAST (cpf_bigint AS TEXT))  <= 11 THEN
>>        cpf_text := REPEAT('0', 11-LENGTH(CAST (cpf_bigint AS TEXT)))
>> || CAST (cpf_bigint AS TEXT); -- efetua a conversao
>>        IF mask THEN
>>          cpf_text := SUBSTRING(cpf_text FROM 1 FOR 3)
>>                      || '.'
>>                      || SUBSTRING(cpf_text FROM 4 FOR 3)
>>                      || '.'
>>                      || SUBSTRING(cpf_text FROM 7 FOR 3)
>>                      || '-'
>>                      || SUBSTRING(cpf_text FROM 10 FOR 2); -- faz o
>> mascaramento do cpf
>>        END IF;
>>     ELSE
>>        cpf_text := 'CPF >11 DIG'; -- caso o cpf ultrapasse os 11 digitos
>>     END IF;
>>
>>     RETURN cpf_text; -- Retorna CPF em formato texto
>>
>> END;
>> $$ LANGUAGE plpgsql;
>> COMMENT ON FUNCTION sp_formataCPF(cpf_bigint BIGINT, mask BOOLEAN) IS '
>> Autor: O Peregrino (emersonherm...@gmail.com)
>> Function que converte CPF em BIGINT para TEXT com opcao para adicionar 
>> mascara.
>> --OBS: Nao efetua validacao do CPF, excetuando-se caso o CPF
>> ultrapasse 11 digitos.
>> --Exemplo de uso:
>> --SELECT sp_formataCPF(848327462,TRUE); -- resultado "008.483.274-62"
>> '
>> ;
>>
>>
>>
>> Em 8 de novembro de 2010 16:50, Osvaldo Kussama
>>  escreveu:
>>> Em 8 de novembro de 2010 17:39, Marcone  escreveu:
>>>> No meu caso eu já uso o char, pq com campos numéricos não serão
>>>> guardados os zeros à esquerda. Se você for usar o mesmo campo para
>>>> armazenar CPF e CNPJ os zeros à esquerda podem transformar um CNPJ em
>>>> um CPF (verificações à parte). Eu já tive trabalho com isso e não
>>>> recomendo campos numéricos para CPF/CNPJ.
>>>>
>>>
>>>
>>> Creio que você está fazendo uma confusão entre o formato de
>>> armazenamento e o formato de exibição.
>>> O número 1 = 01 = 001 etc,  a cadeia de caracteres "1" realmente é
>>> diferente de "01" ou "001" mas tanto o CPF quanto o CNPJ são códigos
>>> numéricos, ou seja, zeros a esquerda não alteram seu significado.
>>>
>
>
> Apenas para simplificar suas funções de formatação poderiam ser apenas:
> SELECT to_char(1234567890,'000"."000"."000"-"00') AS cpf;
> SELECT to_char(1234567000199,'00"."000"."000"/""-"00') AS cnpj;
>
> Osvaldo
> ___
> 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] função receber valores para selec ionar dentro do IN

2010-12-22 Thread Emerson Hermann
--Baseado no seu exemplo faria dessa forma:

--SELECT * FROM rel_treinamento_admin2(13,$$1,2,3,4$$);

-- criacao de tipo, acho que não é necessário no seu caso, criei só
para exemplificar
CREATE TYPE public.tpi AS
(
id  INTEGER
);

-- O segundo parametro ficaria como text, dentro da função seria feito
cast para inteiro
--a função começa assim versao 2 :
DROP FUNCTION IF EXISTS rel_treinamento_admin2 (IN x integer, IN y text);
CREATE OR REPLACE FUNCTION rel_treinamento_admin2(IN x integer, IN y text)
 RETURNS SETOF tpi AS
$$
DECLARE
 jtpi;
BEGIN

 FOR j IN
   (
SELECT sua_query
  FROM generate_series(1,x) AS sua_query  -- aqui
poderia ser a sua consulta
 WHERE sua_query
-- a parte do in
IN
 (
 SELECT z.id[i]::integer
   FROM
  (
 SELECT *
   FROM string_to_array(y,',')  AS id
  ) AS z,
  generate_series(
1,array_upper(string_to_array(y,','),1)) AS i
 )
   )

 LOOP

  RETURN NEXT j;

 END LOOP;


 RAISE NOTICE 'Processo concluido com sucesso!!!';

 RETURN;

EXCEPTION WHEN QUERY_CANCELED THEN
 RAISE NOTICE 'Processo cancelado, ROLLBACK EFETUADO!!!';

 RETURN;

END;
$$
LANGUAGE 'plpgsql';

-- Sintetizando ... a parte do IN em query, basicamente seria assim:

   SELECT sua_query
  FROM generate_series(1,13) AS sua_query
 WHERE sua_query
IN
 (
 SELECT z.id[i]::integer
   FROM
  (
 SELECT *
   FROM string_to_array('1,2,3,4',',')  AS id
  ) AS z,
  generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i
 ) ;
Espero ter ajudado!

Cordialmente,

Emerson Hermann

Em 22 de dezembro de 2010 11:03, Beto Lima  escreveu:
> pessoal fiz uma função mas preciso passar uma lista de valores para
> buscar dentro do IN...
>
> SELECT * FROM rel_treinamento_admin(13,1,2,3,4)
>
> a função começa assim:
>
> CREATE OR REPLACE FUNCTION rel_treinamento_admin(IN x integer, IN y
> integer, OUT nome_posto text, OUT nome text, OUT soma_notas text)
>
> numa parte do select preciso comparar uma coluna com IN valores do
> segundo parametro
>
> ex: AND coluna IN ($2)
>
> Só que não sei como passar estes valores para o segundo parametro no
> caso o IN y integer
>
> valeu
> ___
> 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] Converter SQL_ASCII - UTF-8

2010-12-22 Thread Emerson Hermann
Já tentou converter o arquivo txt gerado em ascii para utf8 com iconv ? [1]

[1]http://linux.die.net/man/1/iconv

Emerson Hermann


Em 22 de dezembro de 2010 16:57, Marcelo Silva  escreveu:
> Ja tentou
>
> select to_ascii(CAMPO,'LATIN1') as NOME from sua_tabela
>
> Aí na hora de importar para o SysBase você retira os acentos
> Deve-se lembrar que o arquivo TEXTO.TXT exportado deve estar no formato
> coerente com os dados ASCII ou UTF8.
>
>
> Marcelo Silva
> 
> msn: marc...@ig.com.br
> Tel.: (11) 2962-7390
> Cel.: (11) 9693-4251
>
> Programador: Delphi, PHP
> Linux Kubuntu User number is # 24362
>
> - Original Message -
> From: Douglas.grupos Rauber
> To: Comunidade PostgreSQL Brasileira
> Sent: Wednesday, December 22, 2010 5:06 PM
> Subject: Re: [pgbr-geral] Converter SQL_ASCII - UTF-8
> Infelizmente, mesmo com o upper não funfou...
> Obrigado
> Douglas
>
> Em 22 de dezembro de 2010 15:47, Rodrigo Della Justina
>  escreveu:
>>
>> Utiliza a funçâo UPPER
>> att
>> Rodrigo Della Justina
>>
>> Em 22 de dezembro de 2010 15:29, Douglas.grupos Rauber
>>  escreveu:
>>>
>>> Boa tarde Galera!
>>> Estou com um problema, e não sei resolver...
>>> Tenho um banco de dados legado, em postgresql, o qual está com encoding
>>> sql_ascii.
>>> Preciso exportar algumas tabelas para arquivo txt para posterior
>>> importação em um banco sybase.
>>> O detalhe é que nesse banco de dados existem inúmeros registros com
>>> caracteres especiais. Que na aplicação são demonstrados, porém, no pgadmin
>>> os campos que tem caracteres especiais são apresentados em branco.
>>> Tentei usar to_ascii, porém, não é possível, pois ele não tem suporte
>>> para converter sql_ascii.
>>> Tentei usar a função
>>> CREATE OR REPLACE FUNCTION limpa_acentos(text)
>>> RETURNS text AS
>>> $BODY$
>>> select
>>>
>>> translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aiiioAIIIOcC');
>>>
>>> $BODY$
>>> LANGUAGE 'sql' IMMUTABLE STRICT;
>>> porém, também sem sucesso. Os campos que são "JOÃO", ficam "JOaO", porém,
>>> os campos que são "MUNICÍPIO" ficam em branco.
>>> Alguma sugestão ?
>>> Obrigado
>>> DRauber
>>> ___
>>> pgbr-geral mailing list
>>> pgbr-geral@listas.postgresql.org.br
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>
>>
>>
>> --
>> Atenciosamente
>> Rodrigo Della Justina
>> (46) 8801-6165
>>
>> ___
>> 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 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] função receber valores para selec ionar dentro do IN

2010-12-23 Thread Emerson Hermann
/*
Desculpa, não fui claro ...
Vamos por partes... dividindo o moido abaixo ...
*/
--1. A função generate_series gera uma sequencia funciona da seguinte forma: [1]

--Exemplo: (gerando um listagem com 10 linhas...)
SELECT * FROM generate_series(1,10);
/*
--resultado
generate_series
---
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
(10 rows)
*/

--2. A função string_to_array, transforma uma string em array   [2]

--Exemplo: (transformando uma string em um array de string, usando
como critério as ',' virgulas na string, para geração do array )
 SELECT *
   FROM string_to_array('1,2,3,4',','); --{1,2,3,4}
/*resultado
 string_to_array
-
 {1,2,3,4}
(1 row)
*/

--3. A função array_upper, dá a dimensão, o tamanho do array [2]

--Exemplo: (obtendo o tamanho do array)
SELECT array_upper(string_to_array('{1,2,3,4}',','),1);  --4
/*
--resultado
 array_upper
-
   4
(1 row)
*/

--4. A combinacao disso fica assim:

--Exemplo: o resultado desta consulta irá retornar duas colunas uma do
tipo array de string e uma do tipo integer (indice do array), as
seguintes colunas são:
-- id(text[]), i(integer)
 SELECT *
   FROM
  (
 SELECT *
   FROM string_to_array('1,2,3,4',',')  AS id
  ) AS z,
  generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i;
/*
--resultado
id | i
---+---
 {1,2,3,4} | 1
 {1,2,3,4} | 2
 {1,2,3,4} | 3
 {1,2,3,4} | 4
(4 rows)
*/

--5. Tratando a query do item 4 fica dessa forma, que foi a
transformação de vários ids em formato linha texto para formato coluna
inteiros.

--Exemplo: o resultado obtido para uso no IN se for o caso
 SELECT z.id[i]::integer
   FROM
  (
 SELECT *
   FROM string_to_array('1,2,3,4',',')  AS id
  ) AS z,
  generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i;
/*
--resultado
 id

  1
  2
  3
  4
(4 rows)
*/

/*
[1]http://www.postgresql.org/docs/9.0/static/functions-srf.html
[2]http://www.postgresql.org/docs/9.0/static/functions-array.html


Cordialmente

Emerson Hermann

*/


Em 23 de dezembro de 2010 11:06, Beto Lima  escreveu:
> nossa Emerson , não entendi nada mas valeu pela ajuda.
> vou ter que ler isso umas 50 vezes pra sacar hehe
> ___
> 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] Como obter o OID da tabela temporaria no instante da criacao da mesma?

2009-06-10 Thread emerson hermann
Ola Pessoal,
Estou desenvolvendo uma store procedure que usa algumas tabelas
temporarias criadas por outra store procedure, porem queria ter
certeza de pegar a tabela temporaria correta.

Como obter o OID da tabela temporaria no instante da criacao da mesma?
Exemplo:

CREATE TEMPORARY TABLE tb_temp01 (
  id integer,
  config varchar(200),
  diretorio varchar(200)
) ON COMMIT PRESERVE ROWS;

Tenho ciencia de que existe dessa forma porem funciona com linhas e
nao com tabelas:
CREATE TEMPORARY TABLE tb_temp01 (
  id integer,
  config varchar(200),
  diretorio varchar(200)
) WITH OIDS
  ON COMMIT PRESERVE ROWS;

Usando o catalogo do postgres tenho essa informacao
SELECT oid, * FROM pg_class WHERE relname = 'tb_temp01';

Porem preciso do OID no momento da criacao da tabela, como fazer ?


Desde ja agradeco.

Cordialmente,

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


Re: [pgbr-geral] Padrão de Escrita SQL

2011-01-11 Thread Emerson Hermann
Eu uso o estilo de padronização do pgadmin3, claúsulas SQL em
maiúsculo tipos em minúsculo e funções em minúsculo, considerando
também a identação do mesmo.

Em 10 de janeiro de 2011 10:45, Emanuel Araújo  escreveu:
> Srs.
>
> Existe alguma referência de padronização da ESCRITA de Comandos SQL,
> FUNÇÕES, ou qualquer documentação de como escrever comandos ?
>
> Hoje temos um Padrão:
>
> SELECT campo
>  FROM tabela
> WHERE campo = 10 ;
>
> SELECT REPLACE(campo2, '-', '')
>  FROM tabela2
> WHERE campodata > CURRENT_DATE - 30 ;
>
> Esse padrão já é adotado mas gostaria de ter alguma referência.
> Ignorando a identação, no exemplo seria casos de maiúsculas e
> minúsculas na SINTAXE e funções dentro de consultas.
>
> Agradeço.
>
> --
> Atenciosamente,
>
> Emanuel Araújo
> http://eacshm.wordpress.com
> ___
> 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] Campo sequence

2011-01-25 Thread Emerson Hermann
/*
120111
220111
320111
420111
520111
*/


--DROP SEQUENCE IF EXISTS teste_seq CASCADE; -- dropa se existir
CREATE TEMPORARY SEQUENCE teste_seq -- cria a sequencia
START 120111   -- inicio em 120111
 INCREMENT BY 10   -- incremento em 10
  NO MAXVALUE  -- valor maximo nao estipulado
 MINVALUE 120111   -- valor minimo 120111
CACHE 1-- cache para transacoes
;

SELECT * FROM teste_seq;

SELECT nextval('teste_seq');

Em 25 de janeiro de 2011 09:08, Fabiano Fernandes
 escreveu:
> Preciso criar um campo sequence que seja incrementado da seguinte forma:
> 120111
> 220111
> 320111
> 420111
> 520111
> Isso é possível? Como fazer isso?
> Att
> Fabiano Fernandes
> ___
> 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] sql formatar nome

2011-02-10 Thread Emerson Hermann
Sem expressão regular eu faria asim, funciona no PG 9.0,  para
funcionar  no PG 8.x, teria que mudar o array_agg por array_acuum
Criei uma store function apenas para simplificar o uso

DROP FUNCTION IF EXISTS sp_formata_nome(text);
CREATE OR REPLACE FUNCTION sp_formata_nome(var text) RETURNS TEXT AS
$body$
SELECT array_to_string(array_agg(nomes),' ')
  FROM
 (
 SELECT CASE WHEN lower(x.id_unico[i]) = 'de' THEN
lower(x.id_unico[i])
 WHEN lower(x.id_unico[i]) = 'dos' THEN
lower(x.id_unico[i])
 WHEN lower(x.id_unico[i]) = 'da' THEN
lower(x.id_unico[i])
 WHEN lower(x.id_unico[i]) = 'e' THEN
lower(x.id_unico[i])
 ELSE
upper(substring(x.id_unico[i],1,1)) ||
lower(substring(x.id_unico[i],2))
END AS nomes
   FROM
  (
   SELECT *
 FROM string_to_array(cast($1 AS text),' ') AS id_unico
  ) AS x,
  generate_series(1,array_upper(string_to_array(cast($1 as
text),' '),1)) AS i

 ) AS x
 ;
$body$
LANGUAGE 'sql';
COMMENT ON FUNCTION sp_formata_nome(text) IS 'Função que formata um
nome, colocando iniciais em maiúsculas e demais em minúsculas';

SELECT sp_formata_nome( 'Jose da Silva e Lira dos Santos');


Caso aconteça outras situações é só acrescentar no case when

Espero ter ajudado !

Emerson Hermann


Em 9 de fevereiro de 2011 21:00, Beto Lima  escreveu:
> Acredito então que não há jeito mesmo em deixar 100%.
> sobre ter uma lista de valores pra comparações, não teria idéia de
> como ficaria...
> mas agradeço a todos pelas dicas
> ___
> 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] phpPgAdmin-5.0.2 no Windows 7

2011-02-25 Thread Emerson Hermann
Olá Marcelo,

Acho que o arquivo php_pgsql.dll não existe no seu diretório de
extensão do php onde fica o php_mysql.dll.
Uma busca via linha comando, poderia lhe dá essa certeza:
dir php_pgsql.dll /s/p
Caso se confirme, sugiro vc baixar a versão do xampp 1.7.4 for windows
em formato zip, não é necessário instalar, apenas para copiar o
arquivo php_pgsql.dll, vc pode baixar em:
http://www.apachefriends.org/en/xampp-windows.html#641
descompactar e no diretório  C:\xampp\php\ext copiar o arquivo
php_pgsql.dll para a pasta de extensao do php que vc instalou, a mesma
que se encontra o arquivo php_mysql.dll.

Despois remove o diretorio xampp.

Espero ter ajudado.




Em 25 de fevereiro de 2011 09:23, Marcelo Silva (IG)
 escreveu:
> Pessoal estou tentando usar o phpPgAdmin-5.0.2 no Windows 7 com Apache 2.x
> para desenvolvimento, mas ele me dá a seguinte informação:
>
> Sua instalação do PHP não têm suporte ao PostgreSQL. Você deverá recompilar
> o PHP utilizando a opção de configuração --with-pgsql (GNU-Linux) ou
> habilitar a extensão extension=php_pgsql.dll no php.ini (Microsoft Windows).
>
> Interessante que já está tudo habilitado, inclusive nesta mesma maquina
> tenho o MySQL e o PHP lista ele no phpinfo() já o Postgres não aparece.
>
> Qual será o truque ?
>
>
> Marcelo Silva
> ---
>
>
> ___
> 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] consulta SQL que devolva uma lista com todos os dias de um determinado mês

2011-03-14 Thread Emerson Hermann
Se ainda servir ...

  SELECT dia::date
FROM (
   SELECT (to_date('2011-03','-MM')+s.a*'1
day'::INTERVAL) AS dia
 FROM generate_series(0, (date_trunc('MONTH',
to_date('2011/03', '/MM')) + INTERVAL '1 MONTH - 1 day')::date -
to_date('2011/03', '/MM'), 1
  ) AS s(a)) x

Em 14 de março de 2011 07:36, Fabrízio de Royes Mello
 escreveu:
>
> Em 14 de março de 2011 07:13, Eloi Ribeiro 
> escreveu:
>>
>> Ola a toda a lista,
>> É possível criar uma consulta SQL que devolva uma lista com todos os dias
>> de um determinado mês?
>> De momento apenas consegui chegar até aqui, tendo como exemplo o mês de
>> Fevereiro de 2011:
>> SELECT
>>     to_date('2011/02', '/MM'),
>>     (date_trunc('MONTH', to_date('2011/02', '/MM')) + INTERVAL '1
>> MONTH - 1 day')::date;
>> O resultado da anterior consulta é o primeiro e ultimo dia do mês:
>> "2011-02-01";"2011-02-28"
>> Resultado pretendido é o seguinte:
>> "2011-02-01"
>> "2011-02-02"
>> "2011-02-03"
>> (...)
>> "2011-02-26"
>> "2011-02-27"
>> "2011-02-28"
>
> Veja se isso resolve:
> select '2011-02-01'::date + dia
>   from generate_series(0, extract( day from (('2011-02-01'::date + '1
> month'::interval)::date - 1::integer))::integer - 1) as dia;
>
> Cordialmente,
> --
> Fabrízio de Royes Mello
>>> Blog sobre TI: http://fabriziomello.blogspot.com
>>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>
> ___
> 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] null + 1

2011-03-15 Thread Emerson Hermann
Jean,
O null se propaga  qualquer coisa (concatenada, string ou calculada,
numeros resultará em nulo) então:

select null+5; --resultado null
select 'teste' || NULL || ' OK'; --resultado null

Para resolver o teu problema sugiro usar função coalesce conforme
exemplo abaixo:

select coalesce(null,0)+5;  --resultado 5

Pegando o teu exemplo ficaria assim:

update material set saldo = coalesce(saldo,0) + 1; --resultado 1

Em 15 de março de 2011 09:31, Jean Pereira
 escreveu:
> Bom dia.
> Aqui da empresa, um programador estava com problemas com a soma de um campo
> null com 1, por exemplo.
> Ele tinha uma tabela de saldo e fez assim:
> update material set saldo = saldo + 1;
> mas o campo saldo tinha o valor null, e gostaria de saber se é normal o
> banco nem se quer dar um warning avisando da soma "errada", ou se está
> correto a soma retornar null mesmo.
> Abraço.
> Jean Pereira
> ___
> 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] PostgreSQL na web

2011-03-16 Thread Emerson Hermann
Olá Angelo,

Tem uma contribuição de Fabio Telles falando sobre a configuração do
postgresql.conf baseado no pg 8.2.

http://www.slideshare.net/telles/reviso-do-postgresqlconf

Espero ter ajudado.

Emerson Hermann

Em 16 de março de 2011 12:23, Angelo -TI - LightComm
 escreveu:
> Eu sempre tive diversas dúvidas sobre a parte de configurações do PostgreSQL 
> para uma melhor performance.
>
> Alguém teria um link de alguma matéria que explicasse bem este tipo de coisa?
>
> Eu já vi muita coisa na internet, mas muitas vezes uma informação de um site 
> falava para configurar de uma forma, outro site dizia de outra e isso sempre 
> acabava me confundindo.
>
> Não sou DBA, sou apenas coordenador de uma equipe de desenvolvimento que 
> utiliza PostgreSQL em seus sistemas e essas informações seriam apenas para 
> aprendizado e para depois discutir com o DBA da empresa com algum 
> conhecimento.
>
> Qualquer dúvida, favor entrar em contato.
>
> Atenciosamente,
>
> Angelo M. Rodrigues
> LightComm Tecnologia
> Cml: (11) 3304-7717
> Celular: (11) 7821-8298
> Nextel: 54 * 13944
> www.lightcomm.com.br
> ang...@lightcomm.com.br
>
> MSN:  angelomrodrig...@hotmail.com
> GTalk:  angelomrodrig...@gmail.com
>
> Em 16/03/2011, às 12:15, Roberto Mello escreveu:
>
>> 2011/3/16 Roberto Mello :
>>> 2011/3/16 Fernando N. Rodrigues :
>>>> Desculpe a minha falta de experiência, mas vocês têm alguma indicação
>>>> negativa do uso do PostreSQL para aplicações web? Será um portal com muitos
>>>> acessos e processamento considerável.
>>>
>>> Nenhuma negativa e muitas positivas. Inclusive trabalhei pessoalmente
>>> com duas aplicações assim: introplay.com (Django) e profbay.com
>>> (Pylons).
>>
>> Só uma coisa, você precisa mudar os parâmetros padrão do PG (memória
>> compartilhada, etc). Os padrões (defaults) são muito conservadores e
>> não darão boa performance. Google por aí, ou um bom livro ou consultor
>> resolvem.
>>
>> Outra coisa é planejar seus discos. Coisas simples aí trazem grandes 
>> benefícios.
>>
>> Roberto
>> ___
>> 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 mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Res: PostgreSQL na web

2011-03-16 Thread Emerson Hermann
Mas algumas UFRN, PF, PRF, ABIN e mais algumas universidades federais  ...

Em 16 de março de 2011 13:56, Renato Ricci
 escreveu:
> Indicação negativa nenhuma.. Não é a toa que a Caixa Econômica Federal está
> usando PostgreSQL... :)
>
> __
>
> Renato R. Ricci
>
> Antes de imprimir, pense em sua responsabilidade e compromisso com o Meio
> Ambiente. O Futuro está em Nossas Mãos!
>
> 
> De: Fernando N. Rodrigues 
> Para: Comunidade PostgreSQL Brasileira 
> Enviadas: Quarta-feira, 16 de Março de 2011 11:48:30
> Assunto: [pgbr-geral] PostgreSQL na web
>
> Pessoal,
> Estamos iniciando um projeto em Python, servidor Nginx, ambiente Django e
> banco de PostgreSQL.
> Desculpe a minha falta de experiência, mas vocês têm alguma indicação
> negativa do uso do PostreSQL para aplicações web? Será um portal com muitos
> acessos e processamento considerável.
> Agradeço qualquer dica, comentários e críticas!
> Obrigado a todos e sucesso!
> Fernando N. Rodrigues
> fernandonon...@gmail.com
>
>
>
>
> ___
> 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] Pgpool ii 3 + postgres 9

2011-03-23 Thread Emerson Hermann
Olá Mauro,

Já tentou alterar os parametros

system_db_hostname = 'localhost'
system_db_port = 5433

e
backend_hostname0 = 'servidor1'
backend_port0 = 5434
backend_hostname1 = 'servidor2'
backend_port1 = 5435

no  pgpool.conf

Espero ter ajudado.

Emerson Hermann

Em 23 de março de 2011 09:17, mauro fonseca  escreveu:
> Companheiros,
> Tenho a seguinte situação:
> 2 servidora postgres 9 , sincronizadas, hotstandby .
> Nelas estão serão instalados o pgpool e na primeira (será sincronizado  para
> a segunda ), 3 clusters utilizando as portas 5433 ,5434 e 5435 , com
> serviços totalmente diferente. Criei cluster para aproveitar a capacidade do
> equipamento e facilitar a manutenção com independência para cada um deles..
> O Problema.
> O pgpool trabalha recebendo em determinada porta, no caso 5432 e
> distribuindo os "selects" entre os 2 equipamentos. Até aí tudo bem. O fato é
> que o pgpool recebe em apenas 1 porta e distribui para os 2 equipamentos.
> Mas eu tenho 3 clusters com serviços diferentes.
> Teria como o pgpool trabalhar recebendo, por exemplo na 5432 e distribuindo
> para a 5532 nos 2 equipamentos, recebendo na 5533 e distribuindo para a
> 5533, recebendo na 5434 e distribuindo para a 5534 nos 2 equipamentos.
> Obrigado por qualquer ajuda.
>
> ___
> 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] quantidade de ocorrencia de uma string

2011-04-05 Thread Emerson Hermann
Beto,


--query 1, com ER, retornando apenas uma linha

 SELECT COUNT(1)
   FROM  regexp_matches('a,b,c,d,a,c', 'a', 'g');

/* Resultado
 count

  2
(1 rows)
*/

--query 2, usandos o padrão da string separado por virgulas

 SELECT x.x[i] , count(*)
   FROM  string_to_array('a,b,c,d,a,c', ',') AS x,
 generate_series(1,array_upper(string_to_array(cast('a,b,c,d,a,c'
as text),','),1)) AS i
GROUP BY 1;

/* Resultado
 x  | count
+---
  b | 1
  c | 2
      d | 1
  a | 2
(4 rows)
*/

Espero ter ajudado.

Emerson Hermann

Em 5 de abril de 2011 09:11, Beto Lima  escreveu:
> desta forma não deu certo, talvez tenha explicado mal.
> ex: Rua:|João Pereira|344|Centro
>
> preciso contar quantos pipes existem nessa ocorrência. Neste caso 3.
>
>
> ___
> 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] Ajuda com select

2011-04-15 Thread Emerson Hermann
Olá Fabiano

Avaliar se vale a pena ... (desempenho, custo e complexidade)

Levando em consideração os dados que vc passou, verificar se atende ...

/*
Preciso recuperar essas informações da seguinte forma:


 ID  |  PNAME  |  ACT - A |  WEIGHT | ACT - C |  WEIGHT | ACT - B |  WEIGHT
-+---+-+--+-+---++--
 3  | Bolt |  9.5|2  | 4.0 |
2 | 2.5|1
*/

/*

DROP TABLE IF EXISTS teste;
CREATE TABLE teste
(
   id integer
 , pname  varchar(25)
 , descriptionvarchar(50)
 , note   numeric(10,1)
 , weight integer
);


INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - A'   ,4.5   , 2);
INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - A'   ,5.0   , 2);
INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - C'   ,3.0   , 2);
INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - C'   ,1.0   , 2);
INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - B'   ,2.0   , 1);
INSERT INTO teste (id, pname, description, note, weight) VALUES  (  3
, 'Bolt' ,  'ACT - B'   ,0.5   , 1);


*/

SELECT * FROM teste;


 SELECT id
  , pname
  , sum("ACT - A") AS "ACT - A"
  , sum(weight_a) weight
  , sum("ACT - C") AS "ACT - C"
  , sum(weight_c) weight
  , sum("ACT - B") AS "ACT - B"
  , sum(weight_b) weight
   FROM
  (
   SELECT id
, pname
, "ACT - A"
, CASE WHEN "ACT - A" <> 0 THEN
  weight
   ELSE
  0
  END AS weight_a

, "ACT - C"
, CASE WHEN "ACT - C" <> 0 THEN
  weight
   ELSE
  0
  END AS weight_c

, "ACT - B"
, CASE WHEN "ACT - B" <> 0 THEN
  weight
   ELSE
  0
  END AS weight_b
 FROM
(
 SELECT id
  , pname
  , weight
  , sum
  (
CASE WHEN description = 'ACT - A' THEN
 note
  ELSE
 0
 END
  ) AS "ACT - A"
  , sum
  ( CASE WHEN description = 'ACT - C' THEN
note
 ELSE
0
END
  ) AS "ACT - C"
  , sum
  (
CASE WHEN description = 'ACT - B' THEN
note
 ELSE
0
END
  ) AS "ACT - B"

   FROM teste
   GROUP BY id
  , pname
  , description
  , weight

) AS x
  ) AS y
   GROUP BY id
  , pname


Espero ter ajudado,

Emerson Hermann


Em 15 de abril de 2011 10:57, fabiano.fernandes
 escreveu:
> Olá a todos!
>
> Estou precisando de um empurrão para criação de um select ...
>
> Alguem pode me ajudar?
>
> Tenho em uma tabela da seguinte forma:
>
>
> ID  |  PNAME  |  DESCRIPTION | NOTE |  WEIGHT
> -+---+---+--+--
>  3  |     Bolt     |      ACT - A       |    4.5   |     2
>  3  |     Bolt     |      ACT - A       |    5.0   |     2
>  3  |     Bolt     |      

Re: [pgbr-geral] problemas com is not null

2011-05-25 Thread Emerson Hermann
Anderson,

No Postgres, null se propaga, null concatenado com qualquer coisa dá null,
sugiro vc usar coalesce nos inserts.[1]

[1]http://www.postgresql.org/docs/current/static/functions-conditional.html

Emerson Hermann

2011/5/25 Anderson 

> boa tarde pessoal,
>
> seguinte tenho uma função que faz uma comparação pra ver se o campo não
> está nulo, porem esta dando erro ou melhor o is not null não esta
> vereficando
>
> XSELECTINCLUIR := 'SELECT '||XINCREMESSAGERAL||' , '||XINCUNIDESTINO||' ,
> '||XINCNUMEROREMESSA||' FROM '||XTABELAINCLUIR||' WHERE
> '||XINCREMESSAGERAL||' = '||XIDSREMESSAS[I]||';';
>
> EXECUTE XSELECTINCLUIR INTO
> VAIDREMESSAINCLUIR,VAIDDESTINOINCLUIR,VAIDNUMEROREMESSAINCLUIR;
>
> IF (VAIDREMESSAINCLUIR IS NOT NULL) THEN
>
>IF(XARMAZENACURVALIDGERAL = 0) THEN
> XINSERT := 'INSERT INTO '||XTABELAROMANEIO||'('||
> XTABELAROMANEIOREMESSAGERAL||','||
> XTABELAROMANEIOANO||','||
> XTABELAROMANEIOUSUARIO||','||
> XTABELAROMANEIOSETOR||','||
> XTABELAROMANEIOUNIDADE||','||
> XTABELAROMANEIODE||','||
> XTABELAROMANEIOPARA||'
> )VALUES('||
> VAIDREMESSA||','||
> XANO||','||
> XUSUARIOID||','||
> XSETOR||','||
> XUNIDADEID||','||
> XUNIDADEID||','||
> XUNIDADEDESTINO||')';
>END IF;
> IF(XARMAZENACURVALIDGERAL != 0) THEN
> XINSERT := 'INSERT INTO '||XTABELAROMANEIO||'('||
> XTABELAROMANEIOIDGERAL||','||
> XTABELAROMANEIONUMERO||','||
> XTABELAROMANEIOREMESSAGERAL||','||
> XTABELAROMANEIOANO||','||
> XTABELAROMANEIOUSUARIO||','||
> XTABELAROMANEIOSETOR||','||
> XTABELAROMANEIOUNIDADE||','||
> XTABELAROMANEIODE||','||
> XTABELAROMANEIOPARA||'
> )VALUES('||
> XARMAZENACURVALIDGERAL||','||
> VAIDREMESSA||','||
> XARMAZENACURVALUNIDADE||','||
> XANO||','||
> XUSUARIOID||','||
> XSETOR||','||
> XUNIDADEID||','||
> XUNIDADEID||','||
> XUNIDADEDESTINO||')';
>   END IF;
>
>  EXECUTE XINSERT;
> END IF;
>
>
> o retorno é "argumento de consulta de string do EXECUTE é nulo" o problema
> é que se o teste ver que é nulo não era pra executar o EXECUTE XINSERT;
>
> versão do banco 8.3
>
> desde já agradeço.
>
> Anderson
>
> ___
> 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] Select em campos com acentos

2011-08-10 Thread Emerson Hermann
Olá Danilo,

Outra opção é criar uma function sem_acento (listada abaixo) é usar a mesma.

DROP FUNCTION IF EXISTS sem_acento(text);

CREATE OR REPLACE FUNCTION sem_acento(text) RETURNS text AS
$$
SELECT 
translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aiiioAIIIOcC');
$$
LANGUAGE sql VOLATILE;

Exemplo usando a function

SELECT cidade
  , uf
  FROM municipios
 WHERE sem_acento(cidade) ILIKE sem_acento('%são%')
 ;

SELECT cidade
 , uf
  FROM municipios
 WHERE sem_acento(cidade) ILIKE sem_acento('%sao%')
 ;

Caso não queira usar a function poderia usar o translate ao invés da
function, não fica muito elegante, mas fica funcional:

Exemplo sem usar function

SELECT cidade
 , uf
  FROM municipios
 WHERE 
translate(cidade,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aiiioAIIIOcC')
 ILIKE 
translate('%sao%','áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aiiioAIIIOUUUUcC')
     ;

Existe várias formas...

Espero ter ajudado.

Emerson Hermann


Em 9 de agosto de 2011 10:06, Danilo Silva
 escreveu:
> Tenho uma coluna do tipo texto que contém letras maiúsculas, minúsculas, com
> e sem acentos.
> Existe alguma forma ou função efetuar uma busca desses registros
> independentemente da forma como foi inserido no banco?
> Exemplo, se for digitado SELECT cidade,uf FROM municipios WHERE (cidade LIKE
> '%sao%') ou SELECT cidade,uf FROM municipios WHERE (cidade ILIKE '%sao%')
> essa consulta retornar:
>
>   cidade| uf
> +
>  São Mateus | ES
>  São Mateus do Maranhão | MA
>  São Mateus do Sul  | PR
> (3 rows)
>
> Retorna campos com e sem acentos, maiúsculos ou minúsculos.
>
>
> Att.
>
> Danilo
>
> ___
> 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] View no Postgres melhora desempenho ?

2011-08-19 Thread Emerson Hermann
Olá Pessoal,

A dúvida é a seguinte:
Em algums SGBDs usar view otimiza o desempenho, a pergunta é usar view
no Postgres realmente otimiza o desempenho?

Alguém poderia indicar alguma documentação de preferencia oficial do
Postgres, falando a respeito  ?

Estou ciente dos beneficios do uso de view, entrentanto não tenho
certeza quanto isso aos menos no Postgres.

Desde já agradeço.

Cordialmente,

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


Re: [pgbr-geral] View no Postgres melhora desempenho ?

2011-08-19 Thread Emerson Hermann
Guimarães,

Então se escrever uma consulta e rodar várias vezes sem modificação
seria equivalente   ?

Emerson Hermann


Em 19 de agosto de 2011 15:53, Guimarães Faria Corcete DUTRA, Leandro
 escreveu:
> 2011/8/19 Emerson Hermann :
>>
>> Em algums SGBDs usar view otimiza o desempenho, a pergunta é usar view
>> no Postgres realmente otimiza o desempenho?
>
> Indiretamente, porque evita reescrever a mesma consulta com sintaxe
> diferente.  Usar exatamente a mesma sintaxe facilita o
> reaproveitamento do plano de execução.
>
>
> --
> Skype:leandro.gfc.dutra?chat   Yahoo!: ymsgr:sendIM?lgcdutra
> +55 (61) 3546 7191 Google Talk: xmpp:leand...@jabber.org
> +55 (11) 9406 7191  MSNIM:chat?contact=lean...@dutra.fastmail.fm
> sip:leand...@iptel.org ICQ: AIM:GoIM?screenname=61287803
> ___
> 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] Streaming Replication

2011-09-06 Thread Emerson Hermann
Sugiro esses ...

http://eulerto.blogspot.com/2010/11/hot-standby-e-streaming-replication.html
http://emersonhermann.blogspot.com/2010/10/configurando-replicacao-nativa-do.html
http://wiki.postgresql.org/wiki/Streaming_Replication



Em 6 de setembro de 2011 17:19, Luciano Schardosim
 escreveu:
> Pessoal,
>
> Alguém aí tem alguma dica ou documentação que ajude a fazer a configuração de 
> master e slave? Não tenho certeza se estou fazendo a configuração correta no 
> slave. Se alguém tiver alguma dica de documentação adicional, fico grato.
>
> []'s
>
> Prof. Luciano Schardosim
>
> Enviado via iPad
> ___
> 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] Streaming Replication

2011-09-06 Thread Emerson Hermann
Valeu !!
Pra quem tem 39, já perto dos 40 me consolou :)



2011/9/6 Luciano Schardosim :
> Muito bom gurizada!!! Valeu pelas dicas... :D
>
> []'s
>
> Prof. Luciano Schardosim
>
> Enviado via iPad
>
> Em 06/09/2011, às 17:30, Emerson Hermann  escreveu:
>
>> Sugiro esses ...
>>
>> http://eulerto.blogspot.com/2010/11/hot-standby-e-streaming-replication.html
>> http://emersonhermann.blogspot.com/2010/10/configurando-replicacao-nativa-do.html
>> http://wiki.postgresql.org/wiki/Streaming_Replication
>>
>>
>>
>> Em 6 de setembro de 2011 17:19, Luciano Schardosim
>>  escreveu:
>>> Pessoal,
>>>
>>> Alguém aí tem alguma dica ou documentação que ajude a fazer a configuração 
>>> de master e slave? Não tenho certeza se estou fazendo a configuração 
>>> correta no slave. Se alguém tiver alguma dica de documentação adicional, 
>>> fico grato.
>>>
>>> []'s
>>>
>>> Prof. Luciano Schardosim
>>>
>>> Enviado via iPad
>>> ___
>>> 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 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] Dica: Recuperar Dados Removidos (DELETE) ou Alterados (UPDATE)

2012-04-04 Thread Emerson Hermann
Legal é o Flashback Query do Oracle

Em 4 de abril de 2012 16:03, Moisés P. Sena escreveu:

>
>
> Em 4 de abril de 2012 15:37, Fabrízio de Royes Mello <
> fabriziome...@gmail.com> escreveu:
>
> Pessoal,
>>
>> Ai vai uma dica para recuperar registros removidos ou alterados
>> acidentalmente por um DELETE ou UPDATE em uma tabela que ainda *NAO* tenha
>> sofrido um *VACUUM*.
>>
>> Foi criada uma pequena extensão para o PostgreSQL [1] para ler páginas
>> obsoletas de uma tabela, ou seja, aquelas que sofreram um DELETE ou UPDATE.
>>
>> O post [2] mostra como instalar e usar com postgres 9.1. É um projeto
>> recém saido do forno, por isso muito cuidado, mas creio que pode ser uma
>> alternativa em momentos ruins.
>>
>> Att,
>>
>> [1]
>> https://github.com/omniti-labs/pgtreats/tree/master/contrib/pg_dirtyread
>>  [2] http://www.depesz.com/2012/04/04/lets-talk-dirty/
>>
>
> Muito Legal!!
>
> --
> Moisés P. Sena
> (Analista e desenvolvedor de sistemas WEB e mobile)
> http://www.moisespsena.com
> http://linux.moisespsena.com
>
> ___
> 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] PostgreSQL não inicializa no Slackware

2012-06-04 Thread Emerson Hermann
Faz a chamada no arquivo rc.M

Em 4 de junho de 2012 13:44, Emerson Martins
escreveu:

> Segue as permissões
>
> postgres@bdhml:/etc/rc.d$ ls -ld rc.postgresql
> -rwxr-xr-x 1 root root 3507 2011-02-01 11:05 rc.postgresql*
>
>
> Emerson Martins
> DBA Jr
>
>
>
>
> 2012/6/4 Dickson S. Guedes 
>
> Em 4 de junho de 2012 10:01, Emerson Martins
>>  escreveu:
>> > Olá pessoal..Tou precisando de uma ajuda num problema aqui com
>> > Slackware.Nesse servidor o Postgres não inicializa, ja coloquei o
>> script na
>> > pasta /etc/rc.d/rc.postgresql
>>
>> O script com está com permissão de execução?
>>
>> []s
>> --
>> Dickson S. Guedes
>> mail/xmpp: gue...@guedesoft.net - skype: guediz
>> http://guedesoft.net - http://www.postgresql.org.br
>> ___
>> 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 mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Problemas de TI

2012-10-17 Thread Emerson Hermann
Falo pelo dois anos que trabalhei como DBA na UFRN (Universidade Federal do
Rio Grande do Norte)  e lá, no tempo que trabalhei, apenas um de vários BDs
era de aproximadamente  540 GB  e ninguém reclamava quando tinha mais de
1.000 acessos diários simultâneos.

SELECT 540 / 4; -- 135

Comprovado, 135 vezes superior ao limite informado, que foi de 4 GB

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


Re: [pgbr-geral] Postgres muda a posição do registro no update?

2012-11-23 Thread Emerson Hermann
Segue um artigo interessante sobre esse comportamento na prática do
Postgres
Por que usar o vacuum
http://emersonhermann.blogspot.com.br/2010/11/por-que-usar-o-vacuum.html


Em 23 de novembro de 2012 11:07, Euler Taveira  escreveu:

> On 23-11-2012 11:51, Marcelo Silva wrote:
> > No caso da marcação do registro atualizado, a meu ver isso só deveria
> > acontecer em registro deletados (delete) e não atualizados (update),
> > mas isso é só questão de curiosidade mesmo, pois se eles fizeram assim é
> > porque realmente foi necessário.
> >
> O UPDATE não é "in-place", ou seja, se você atualiza um registro, ele
> marca a
> tupla anterior como obsoleta e cria uma nova tupla com os dados
> atualizados.
> Todo esse mecanismo se faz necessário por conta do MVCC. Os espaços antes
> ocupados por tuplas obsoletas são reaproveitados após a execução do VACUUM
> (por isso não há como garantir ordem de inserção dos dados em uma tabela).
>
>
> --
>Euler Taveira de Oliveira - Timbira   http://www.timbira.com.br/
>PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
> ___
> 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] Video no youtube sobre "Integridade do PostgreSQL"

2012-11-29 Thread Emerson Hermann
Muito bom!!!


Em 29 de novembro de 2012 12:21, Fabrízio de Royes Mello <
fabriziome...@gmail.com> escreveu:

> Pessoal,
>
> Antes de mais nada, não sou usuário MySQL, não conheço detalhadamente as
> funcionalidades deste RDBMS e não tenho nada contra ele, apenas gosto, uso
> e vivo de PostgreSQL.
>
> Mas achei interessante o vídeo [1] pois demonstra alguns comportamentos
> estranhos do MySQL que até fiquei surpreso.
>
> Att,
>
> [1] http://www.youtube.com/watch?v=1PoFIohBSM4
>
> --
> Fabrízio de Royes Mello
> Consultoria/Coaching PostgreSQL
> >> Blog sobre TI: http://fabriziomello.blogspot.com
> >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
> >> Twitter: http://twitter.com/fabriziomello
>
>
> ___
> 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] Consulta com 'NOT IN' devolve resultado não esperado

2013-01-10 Thread Emerson Hermann
Olá Eloi,

Deve ser observado que se o resultado da expressão à esquerda for nulo,
ou se não houver nenhum valor igual à direita e uma das linhas à direita
tiver o valor nulo,
o resultado da construção NOT IN será nulo, e não verdade.
Isto está de acordo com as regras normais do SQL para combinações booleanas
de valores nulos. [1]
Idem na versões demais versões do Postgres [2]

Concluindo isso não é um bug mas sim um comportamento padrão do NOT IN, que
está em conformidade com as normas SQL/ANSI,
lembrando que uso de NOT IN não é recomendável quando se pensa em
desempenho.

E finalmente o banco (SGBDR em especial o Postgres) não mente! :) [3]

Uma possível sugestão para o problema em questão seria usar a clausula
EXCEPT ou EXCEPT ALL (subtração de consultas) ou ainda acrescentar no WHERE
IS NOT NULL

(
SELECT indicativo
   FROM sch_meteo.tmp_estaciones
WHERE indicativo = 'C917E' -- 1 row retrieved.
)
EXCEPT
(
  SELECT codigo
 FROM sch_meteo.es_estaciones
  WHERE codigo = 'C917E' -- 0 rows retrieved.
) ;
[1]
http://pgdocptbr.sourceforge.net/pg80/functions-subquery.html#FUNCTIONS-NOT-IN-SUBQ
[2]
http://www.postgresql.org/docs/9.0/static/functions-comparisons.html#AEN16842
[3]
http://emersonhermann.blogspot.com.br/2011/04/o-moido-do-not-in-o-postgres-estaria.html

Espero ter ajudado.

Cordialmente,

Emerson Hermann



Em 10 de janeiro de 2013 12:01, Eloi Ribeiro escreveu:

> Ola a todos,
>
> Tenha duas tabelas com estações meteorológicas e quero saber quais são
> as estações que estão numa tabela (tmp_estaciones) mas não na outra
> (es_estaciones). Para tal executo a seguinte consulta:
>
> SELECT indicativo
> FROM sch_meteo.tmp_estaciones
> WHERE indicativo NOT IN (
>  SELECT codigo
>  FROM sch_meteo.es_estaciones);
> -- 0 rows retrieved.
>
> De antemão eu sei que há estações em 'tmp_estaciones' que não estão em
> 'es_estaciones'. Assim que o resultado não deveria ser zero linhas. As
> seguintes consultas comprovam isso mesmo:
>
> SELECT indicativo
> FROM sch_meteo.tmp_estaciones
> WHERE indicativo = 'C917E'; -- 1 row retrieved.
>
> SELECT codigo
> FROM sch_meteo.es_estaciones
> WHERE codigo = 'C917E'; -- 0 rows retrieved.
>
> O quê que estou a fazer mal?
>
> Obrigado. Cumprimentos,
>
> Eloi
> ___
> 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] Distinct de algumas colulas.

2013-02-04 Thread Emerson Hermann
SELECT DISTINCT ON(campo1, campo2, campo3), campo4 FROM tabela



Em 4 de fevereiro de 2013 12:45, Pedro B. Alves
escreveu:

> Pessoal, não sei se tem alguna função para solucuinar este problema.
>
>
> SELECT campo1, campo2, campo3, campo4 FROM tabela
>
> gostaria de usar um distinct só dos 3 primeiros campos.
>
>
> SELECT DISTINCT(campo1, campo2, campo3), campo4 FROM tabela
>
>
> grato.
>
> ___
> 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] Distinct de algumas colulas.

2013-02-05 Thread Emerson Hermann
SELECT COUNT(*)
FROM
(
SELECT DISTINCT ON(campo1, campo2, campo3) campo1, campo2, campo3, campo4
FROM tabela
ORDER BY campo1, campo2, campo3, campo4
) AS x


Em 5 de fevereiro de 2013 16:59, Pedro B. Alves
escreveu:

> Tem como usar isso com o COUNT()?
>
>
> Em 4 de fevereiro de 2013 14:17, Matheus de Oliveira <
> matioli.math...@gmail.com> escreveu:
>
>>
>>
>> 2013/2/4 Pedro B. Alves 
>>
>> Pessoal, não sei se tem alguna função para solucuinar este problema.
>>>
>>>
>>> SELECT campo1, campo2, campo3, campo4 FROM tabela
>>>
>>> gostaria de usar um distinct só dos 3 primeiros campos.
>>>
>>>
>>> SELECT DISTINCT(campo1, campo2, campo3), campo4 FROM tabela
>>>
>>>
>>>
>> Quase como você escreveu:
>>
>> SELECT DISTINCT ON(campo1, campo2, campo3) campo1, campo2, campo3, campo4
>> FROM tabela;
>>
>> Veja que isso implica num resultado não determinístico, ao menos para o
>> campo4. Em geral, adiciona-se o mesmo no final do ORDER BY para "escolher"
>> qual registro mostrar, nesse caso você "deve" informar os campos usados no
>> DISTINCT ON no *início* do ORDER BY:
>>
>> SELECT DISTINCT ON(campo1, campo2, campo3) campo1, campo2, campo3, campo4
>> FROM tabela
>> ORDER BY campo1, campo2, campo3, campo4 ...;
>>
>> 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 mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SQL Para extrato de C/C

2013-02-26 Thread Emerson Hermann
Marcelo,

Não sei se ajuda, mas peguei esse script de aulas que ministro sobre
BD, veja se atente  a estrutura mostra uma tabela de emprestimo de
colaboradores que é semelhante a sua estrutura de extrato.

Segue script:

-- ddl
--DROP TABLE emprestimo_colaborador;
CREATE TABLE emprestimo_colaborador
(
 id_emprestimo_colaborador bigint
, id_colaboradorbigintNOT NULL
, dt_lancamento date  NOT NULL
, tipo_lancamento   varchar(1)NOT NULL
, vlr_lancamentonumeric(14,2) NOT NULL
, CONSTRAINT pk_emprestimo_colaborador_id_ec PRIMARY KEY
(id_emprestimo_colaborador)
);


--dml

-- efetuando lancamentos relativo a  emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(1,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(2,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(3,2,'2012-04-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(4,2,'2012-05-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(5,2,'2012-06-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(6,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(7,2,'2012-06-12','C',100.00);

-- efetuando lancamento relativo a emprestimo colaborador 2

-- efetuando lancamentos relativo a  emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(8,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(9,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(10,2,'2012-04-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(11,2,'2012-05-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(12,2,'2012-06-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(13,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(14,2,'2012-06-12','C',100.00);

-- TRUNCATE TABLE emprestimo_colaborador;
--dql

-- listando emprestimo

SELECT *
 FROM emprestimo_colaborador
;

-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, forma 01

   SELECT id_colaborador
, dt_lancamento
, tipo_lancamento
, vlr_lancamento
,
(
 SELECT sum
  (
   CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
 WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
ELSE
0.00
   END
  )
   FROM emprestimo_colaborador
  WHERE dt_lancamento <= ec.dt_lancamento
AND id_colaborador = 2
)  AS saldo
FROM emprestimo_colaborador AS ec
 ORDER BY dt_lancamento
   ;


-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, com mais detalhes forma 02

   SELECT id_colaborador
, dt_lancamento
, tipo_lancamento
, CASE WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
  ELSE
   0.00
 END AS credito
, CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento
  ELSE
   0.00
 END AS debito
,
(
 SELECT sum
  (
   CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
 WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
ELSE
0.00
   END
  )
   FROM emprestimo_colaborador
  WHERE dt_lancamento <= ec.dt_lancamento
AND id_colaborador = 2
)  AS saldo
FROM emprestimo_colaborador AS ec
 ORDER BY ec.dt_lancamento
   ;

No script acima vc pode mudar o campo date para timestamp.

Espero ter ajudado.



Em 26 de fevereiro de 2013 09:14, José Mello Júnior
 escreveu:
> Utilizando o Case e functions window para demonstrar o saldo, nem há
> necessidade de qualquer outra coisa.
>
> Att
>
> Em 26 de fevereiro de 2013 08:27, Ricardo Carlini Sperandio
>  escreveu:
>
>> Enviado pelo Motorola Razr
>> Em 25/02/2013 23:50, "Eduardo Almeida" 
>> escreveu:
>>
>>
>> >
>> > tente 

Re: [pgbr-geral] REF: DISTINCT E COUNT().

2013-04-02 Thread Emerson Hermann
Tentativa e erro ...

  SELECT
 min(idlista) AS idlista
   , produto
   , sum(qtde1)   AS qtde1
   , sum(qtde2)   AS qtde2
FROM lista
GROUP BY produto
ORDER BY 1 ASC;

-- ou se a chave for concatenada

  SELECT
 idlista
   , produto
   , sum(qtde1)   AS qtde1
   , sum(qtde2)   AS qtde2
FROM lista
GROUP BY idlista
   , produto
ORDER BY 1 ASC;
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Trim X Chr(13) X Espaco

2013-07-23 Thread Emerson Hermann
Uma sugestão de solução para remover caracteres especiais seria criar uma
store function para remover esse caracteres especiais.
http://emersonhermann.blogspot.com.br/2013/07/remover-caracteres-especiais-em-campos.html



Em 22 de julho de 2013 20:50, Matheus de Oliveira  escreveu:

>
> 2013/7/22 Marcelo da Silva 
>
>> Pessoal, tenho o seguinte, sabe como é o usuário no copia e cola, as
>> vezes vem caracteres invisiveis, mas que nos dão uma dor de cabeça.
>>
>> Veja os exemplos dos select abaixo:
>>
>>  SELECT 'TESTE'  = "TESTE"
>> SELECT TRIM('TESTE ') = "TESTE"
>> SELECT TRIM('TESTE
>> ') = "TESTE "
>>
>> Vejam que o ultimo select tem um Chr(13) no final da string, o que deixa
>> o Trim menos "eficiente" pois ele tira o chr(13) mas deixa um espaço.
>>
>>
>
>> Me parece que o Trim entende que logo depois do " " tem um novo caracter,
>> então ele passa a considerar o " " como um intervalo de palavras... isso
>> acaba causando problemas numa verificação no Delphi, que que o Trim do
>> Delphi limpa mesmo caracteres como chr(13) quando percebe que não há mais
>> caracteres visiveis.
>>
>> Pergunta: Isso é um bug do trim Postgres ou esse funcionamento está
>> correto?
>>
>>
> É o comportamento padrão. O PostgreSQL vai remover apenas espaços do
> início e fim quando usada função trim com apenas uma string como parâmetro
> [1].
>
> Mas... Você pode passar como segundo parâmetro quais serão os caracteres
> que devem ser removidos do início e fim, bastando passar uma string com os
> mesmos. Exemplo, para ignorar espaço, tab, line feed e carriage return:
>
> SELECT trim(coluna, E' \n\r\t') ...;
>   ^ obs: tem um espaço no início da string.
>
> [1]
> http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-OTHER
>
> 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


Re: [pgbr-geral] Fwd: Funcão para contar dias uteis

2013-08-06 Thread Emerson Hermann
Não se atende a sua necessidade, mas vou tentar ...

Função para dias úteis, acrescentei também a tabela feriado conforme script
abaixo:


--DROP FUNCTION usf_prox_dia_util (data_inicialx date, diasx integer);
CREATE OR REPLACE FUNCTION usf_prox_dia_util (data_inicialx date, diasx
integer)
RETURNS date AS
$BODY$

SELECT max(dia::date)
  FROM
 (
 SELECT (data_inicialx+s.a*'1 day'::INTERVAL) AS dia
   FROM generate_series(0, (data_inicialx + diasx) - data_inicialx, 1
 ) AS s(a)) foo
 WHERE extract(dow FROM dia) BETWEEN 1 AND 5

EXCEPT

 SELECT data
   FROM feriado

$BODY$
LANGUAGE 'sql';





Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez  escreveu:

> Em 6 de agosto de 2013 08:56, Marcelo da Silva 
> escreveu:
> > Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar
> a
> > verificação em cada select do que ter uma função pra isso? Não entendi.
>
> A regra de ouro é: se dá para fazer com SQL puro, não faça com PL.
> Quando você manda um comando para um SGDB, seja Postgres, SQL Server,
> Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da
> forma mais eficiente possível. Se você manda uma consulta envolvendo
> varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas
> para executar a sua consulta.
>
> Quando você utiliza o PL, o otimizador perde a sua autonomia em favor
> da sua lógica de programação. Claro que se sua função é do tipo
> IMMUTABLE, isso não é tão importante, afinal, você não está
> consultando nenhuma tabela. Mas a sua função vai invariavelmente
> aparecer dentro de um SQL e aí as coisas vão se complicando.
> --
> Atenciosamente,
> Fábio Telles Rodriguez
> blog: http://savepoint.blog.br
> e-mail / gtalk / MSN: fabio.tel...@gmail.com
> Skype: fabio_telles
>
> Timbira - A empresa brasileira de Postgres
> http://www.timbira.com.br
> ___
> 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] PG 9.3

2013-09-10 Thread Emerson Hermann
Sinceramente, não testei ainda a 9.3, mas achei muito interessante a feature
materialized views e events triggers, isto é, gatilhos de comandos ddl,
para monitoramento e auditoria.



Em 10 de setembro de 2013 10:30, JotaComm  escreveu:

> Bruno,
>
>
> Em 10 de setembro de 2013 10:18, Bruno Silva escreveu:
>
> Alguém tem noticias do 9.3 já sendo usado em produção?
>>
>
> Foi lançado ontem a versão final. Sugiro coloca-lo em ambiente de teste
> primeiro.
>
>>
>> Bruno E. A. Silva.
>>
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> Abraços
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> ___
> 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] Chamando uma função dentro de uma função

2014-02-13 Thread Emerson Hermann
Olá Ari Lima,

Apenas por desencargo de consciência ou como procedimento de segurança eu
 substituiria o seguinte código:
"WHERE ba.data = (SELECT proximoDomingo())"
Por este, testando:
"WHERE cast(ba.data as date) = cast (proximoDomingo() as date)"

Esse mesmo código colocaria também no copy, atentar de remover da clausula
 inner join e colocar no where.

E também confirmar permissão de diretório e arquivos e se os mesmos existem.

Nos testes que fiz em uma escala reduzida usando a sua função,  funcionou
corretamente, levando em consideração esses aspectos supra-citados.

Espero ter ajudado.



Espero ter ajudado!






Em 13 de fevereiro de 2014 15:02, Ari Lima  escreveu:

> Olá Rafael,
>
> Sim, o campo ba.data é date. O SQL do copy já é uma função testada e
> aprovada anteriormente em um outro projeto. Por isso que já esgotei as
> possibilidades e decidi recorrer aqui a lista para ver se tenho uma
> luz.
>
> 2014-02-13 14:50 GMT-02:00 Rafael Fialho Corrêa :
> > Em 13 de fevereiro de 2014 13:41, Ari Lima  escreveu:
> >
> >> Pessoal,
> >>
> >> Estou tendo minha primeira experiência com PGSQL e ainda to apanhando
> >> pra coisas triviais.
> >>
> >> Por exemplo, eu criei uma função que preciso para achar a data do
> >> próximo Domingo da semana. Está funcionando perfeitamente.
> >> Agora estou criando uma outra função para fazer um dump de
> >> determinadas informações do banco e como um dos filtros a data
> >> retornada pela função proximoDomingo(). Então fica algo como:
> >> "WHERE ba.data = (SELECT proximoDomingo())"
> >>
> >> não dá erro, mas também não mostra nenhum resultado. Se eu substituo a
> >> função por uma data fixa, funciona normalmente. Resumindo, minha
> >> dúvida é:
> >>
> >> como faço para capturar o resultado da minha função que está
> >> funcionando como planejado e usá-lo no filtro?
> >
> >
> > Chamando a função "select proximoDomingo()", o resultado obtido,
> > aparentemente, é o esperado.
> >
> > Seu campo "data" da tabela "ba" também é date?
> >
> > Tente executar o SQL da função (do copy) fora dela e ir
> eliminando/trocando
> > os filtros. Ao meu ver a pesquisa está correta, mas também depende das
> > outras informações que não tenho como testar.
> >
> > []'s
> >
> > ___
> > 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 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


Re: [pgbr-geral] 10 melhores características do PG

2014-09-09 Thread Emerson Hermann
Mais uma vantagem do Postgres..
Identificadores ultrapassam os 30 caracteres

Em 9 de setembro de 2014 09:08, Flavio Henrique Araque Gurgel <
fha...@gmail.com> escreveu:

> Senhores, estou querendo atualizar 2 posts antigos do blog, com as
>> vantagens e desvantagens do PostgreSQL sobre o Oracle.
>>
>> Queria antes fazer uma pesquisa aqui... quais as 10 maiores
>> características do PG na sua opinião?
>>
>
> Estás vivo então?
>
> Eu quero listar umas aqui:
> - o código é aberto
> - é fácil escrever extensões e existem muitas disponíveis
> - diversas linguagens procedurais
> - FDW
> - proximidade da norma SQL
> - funções NoSQL também
> - drivers para praticamente todas as linguagens de programação existentes
> - comunidade séria, porém vibrante
> - correções rápidas quando se acha um bug crítico
> - funciona em dezenas de plataformas
>
> Tem outras, mas você pediu 10 ;)
>
> []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] RES: Consulta a código NCM

2016-04-20 Thread Emerson Hermann
Eu armazenaria toda estrutura do NCM como string [1] [2]. É mais simples.

[1]
http://emersonhermann.blogspot.com.br/2012/09/consulta-sql-de-plano-de-contas-query.html
[2]
http://emersonhermann.blogspot.com.br/2013/01/desenvolvendo-querys-sql-para-razao-e.html

Em 20 de abril de 2016 09:17, Márcio A. Sepp 
escreveu:

>
>
> Pessoal,
>
>
>
> Gostaria de compartilhar um problema e verificar se alguém pode me dar uma
> opinião.
>
>
>
> Tenho a necessidade de associar características a um NCM
> .
> Um código NCM é formado da seguinte forma:
>
>
>
> SEÇÃO   I DEFINIÇÃO
>
> Capítulo  01   Animais vivos
>
> Posição   0104Animais vivos das
> espécies ovinas ou caprinas
>
> Subposição 0104.10  Ovinos
>
> Item0104.10.1   Reprodutores de raça pura
>
> Subitem  0104.10.11  Prenhe ou com cria ao pé
>
>
>
>
>
> Acontece que a característica pode estar associado a qualquer nível do
> NCM. O fato é que quando eu fizer uma consulta a um código 0104.10.11,
> tenho que retornar as características que estão associadas diretamente ao
> código e também as características que estiverem associadas aos códigos de
> hierarquias superiores.
>
>
>
> Minha dúvida está em qual seria a melhor forma de armazenar este código,
> para que as consultas tenham a melhor performance.
>
>
>
> Armazenar cada pedaço do código em uma coluna separada, ou gravar em um
> único campo string?
>
>
>
> Existe alguma forma melhor de executar a consulta (performance) do que a
> abaixo?
>
>
>
> select * from ncmcaracteristica
>
> Where
>
> subitem = '0104.10.11'
>
> OR item = '0104.10.1'
>
> OR subposicao = '0104.10'
>
> OR posicao = '0104'
>
> OR capitulo = '01'
>
>
>
>
>
> Dê uma olhada na cláusula with recursive. Dependendo como está a sua
> estrutura, pode ser aplicado no seu caso.
>
> http://www.postgresql.org/docs/9.5/static/queries-with.html
>
>
>
>
>
> ___
> 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] Configurações Servidor Desenvolvimento Postgres

2016-08-25 Thread Emerson Hermann
Leonardo,

Com poucas informações é difícil ajudar, informações como:

Quantos meses são envolvidos?

Quantos registros na tabela de lançamentos e de plano de contas, para o
período informado?

Qual a estrutura  das tabelas?

Em que situação entra desenvolvimento de Stores Functions ou Stores
Procedures ?

Qual ou quais as querys processadas?

Relativo ao balancete, mesmo sem saber,  20 a 30 minutos ainda é muito, já
pensou em mudar abordagem para processamento apenas com query [1] [2],
desconsiderando functions e ou prodecures ou ainda codificação na aplicação?

[1]
http://emersonhermann.blogspot.com.br/2012/09/consulta-sql-de-plano-de-contas-query.html
[2]
http://emersonhermann.blogspot.com.br/2013/01/desenvolvendo-querys-sql-para-razao-e.html

Espero ter ajudado.


Em 25 de agosto de 2016 10:32, Guimarães Faria Corcete DUTRA, Leandro <
l...@dutras.org> escreveu:

> 2016-08-25 10:25 GMT-03:00 Leonardo Coleraus :
> >
> > qual a melhor configuração pra fazer no postgres.conf, do servidor de
> DESENVOLVIMENTO pra ter um bom ambiente de teste, pois no meu Servidor de
> Produção esse balancete demora em torno de 1 hora pra fazer
>
> Tudo depende.  Tem de ver que consultas tomam mais tempo, qual a
> estrutura envolvida, estatísticas, configurações atuais tanto do SGBD
> quanto de SO e servidor, versões de programas &c.
>
> Dica: pg_tune.
>
>
> --
> skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
> +55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
> +55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
> BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
> ___
> 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] Emerson Hermann quer manter contato no LinkedIn

2011-02-17 Thread Emerson Hermann via LinkedIn
LinkedIn
Emerson Hermann requested to add you as a connection on LinkedIn:
--

Mateus,

Eu gostaria de adicioná-lo(a) à minha rede profissional no LinkedIn. - Emerson 
Hermann

Accept invitation from Emerson Hermann
http://www.linkedin.com/e/1b7qwt-gka2nz8j-4p/hJyn_mKDb3AYKem6pM_q9mB_905WKe_qzCqrQvDjbGRKE3zlm8R7/blk/I90953389_20/pmpxnSRJrSdvj4R5fnhv9ClRsDgZp6lQs6lzoQ5AomZIpn8_c39vejwPcPkVc3B9bPBKrSIJiCxLbPsOc34Vcj4RcP8LrCBxbOYWrSlI/EML_comm_afe/

View invitation from Emerson Hermann
http://www.linkedin.com/e/1b7qwt-gka2nz8j-4p/hJyn_mKDb3AYKem6pM_q9mB_905WKe_qzCqrQvDjbGRKE3zlm8R7/blk/I90953389_20/0McBYVe3cPdjAMekALqnpPbOYWrSlI/svi/
--

DID YOU KNOW you can be the first to know when a trusted member of your network 
changes jobs? With Network Updates on your LinkedIn home page, you'll be 
notified as members of your network change their current position. Be the first 
to know and reach out!
http://www.linkedin.com/

 
-- 
(c) 2011, LinkedIn Corporation___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral