Vamos ver se consigo ajudar. Esta é uma dúvida do Juliano Fischer:
"Ola, estou com um problema em uma implementação e creio que pode me ajudar.
Preciso criar um subprograma armazenado que crie um indice,se já existir, informar o usuario, cado contratio, crie um indice.
criaIndice(campo,tabela);"
Não é tão difícil! A solução está abaixo, mas cuidado pois o meu código pode e deve ser melhorado. Nomes de parâmetros, métodos e variáveis e bons comentários podem ser adicionados.
Além disso, o exemplo só verifica um campo e exige que se tenha cuidado na nomenclatura dos campos, pois utiliza a cláusula LIKE.
1 - Recuperar informações dos índices.
A dica é utilizar a pg_indexes, visão de sistema mais amigável para saber se o índice existe:
select * from pg_indexes;
2 - Criar uma função parametrizada que indica se os índices existem. Observem que utilizei a linguagem SQL, e não Pl/ PgSql. Poderia utilizar qualquer outra liguagem, mas a lógica seria similar.
-- Verifica se existe o índice. Retorna ZERO se o índice não for encontrado
CREATE OR REPLACE FUNCTION retindex(in tabela varchar, in campo varchar) RETURNS bigint AS $$
select count(*) from pg_indexes where tablename = $1 and indexdef like '%' || $2 || '%'
$$
LANGUAGE SQL;
3 - Criar função parametrizada que cria o índice caso o mesmo não exista, e que utilize a função anterior. Linguagem Pl/ PgSQL.
-- Verifica e cria novo índice se for o caso
CREATE OR REPLACE FUNCTION criaindex (tabela varchar, campo varchar) RETURNS VARCHAR AS $$
DECLARE
func_cmd VARCHAR;
BEGIN
if retindex($1,$2) > 0 then
RETURN 'OK';
else
func_cmd := 'CREATE INDEX ' || $1 || '_IDX ON ' || $1 || ' (' || $2 || ')';
EXECUTE func_cmd;
RETURN func_cmd;
end if;
END;
$$ LANGUAGE plpgsql;
4 - Testando tudo
select retindex ('teste','c1');
select criaindex ('teste', 'c1');
Companheiros, quem pode dar um código que melhore ainda mais esta criação de índices com função armazenada? Juliano, resolvi seu problema?
No ar desde 2007! Blog com informações e notícias sobre o banco de dados PostgreSQL, aquele que todos adoramos usar. Trata-se de uma ferramenta livre e de código aberto, mantida por uma comunidade ativa de usuários da qual você é convidado fazer parte. Textos, ideias e outras contribuições podem ser enviadas para Cláudio Bezerra Leopoldino: claudiob_br@yahoo.com.br
segunda-feira, 29 de outubro de 2007
sexta-feira, 19 de outubro de 2007
A Função DATE_PART
Esta utilíssima função retorna parte de uma data, hora ou timestamp para manipulação. É bastante prática e utilizada nas aplicações PostgreSQL. Equivale à função EXTRACT.
Aceita como parâmetros um texto com a parte da data a ser extraída e outro parâmetro com a data/ hora/ timestamp da qual será extraída parte.
Sintaxe:
1- date_part(text, timestamp) double precision
2 - date_part(text, interval) double precision
Exemplos:
1 - Date_part com current_date. Retornando dia da semana, dia, mês e ano.
SELECT date_part('dow', current_date); --DAY OF WEEK
SELECT date_part('day', current_date);
SELECT date_part('month', current_date);
SELECT date_part('year', current_date);
2 - Data_part com current_date retornando dia da semana, dia, mês e ano na mesma linha.
SELECT date_part('day', current_date) as dia, date_part('month', current_date) as mês, date_part('year', current_date) as ano;
3 - Data_part com current_time.
SELECT date_part('hour', current_time);
SELECT date_part('minute', current_time);
SELECT date_part('second', current_time);
SELECT date_part('milliseconds', current_time);
4 - Data_part com current_time retornando hora, minuto, segundo e milésimos de segundo em uma só linha.
SELECT date_part('hour', current_time), date_part('minute', current_time), date_part('second', current_time), date_part('milliseconds', current_time);
5 - Date_part com current_timestamp.
SELECT date_part('dow', current_timestamp);
SELECT date_part('day', current_timestamp);
SELECT date_part('month', current_timestamp);
SELECT date_part('milliseconds', current_timestamp);
6 - Date_part com current_timestamp, retornando dia da semana, dia, mês e os milisegundos da hora corrente.
SELECT date_part('dow', current_timestamp), date_part('day', current_timestamp), date_part('month', current_timestamp), date_part('milliseconds', current_timestamp);
7 - Date_part com conversão da string para campos data/ hora/ timestamp.
SELECT date_part('day', date '12-12-2007');
SELECT date_part('month', date '12-12-2007');
SELECT date_part('hour', time '02:12:45');
SELECT date_part('minute', time '02:12:45');
SELECT date_part('year', timestamp '12-12-2007 02:12:45');
SELECT date_part('hour', timestamp '12-12-2007 02:12:45');
8 - Sintaxes utilizando interval.
SELECT date_part('year', interval '4 years 3 months');
SELECT date_part('month', interval '4 years 3 months');
SELECT date_part('hour', interval '12 hour 10 minutes 12 seconds');
SELECT date_part('minute', interval '12 hour 10 minutes 15 seconds');
SELECT date_part('second', interval '12 hour 10 minutes 15 seconds');
Aceita como parâmetros um texto com a parte da data a ser extraída e outro parâmetro com a data/ hora/ timestamp da qual será extraída parte.
Sintaxe:
1- date_part(text, timestamp) double precision
2 - date_part(text, interval) double precision
Exemplos:
1 - Date_part com current_date. Retornando dia da semana, dia, mês e ano.
SELECT date_part('dow', current_date); --DAY OF WEEK
SELECT date_part('day', current_date);
SELECT date_part('month', current_date);
SELECT date_part('year', current_date);
2 - Data_part com current_date retornando dia da semana, dia, mês e ano na mesma linha.
SELECT date_part('day', current_date) as dia, date_part('month', current_date) as mês, date_part('year', current_date) as ano;
3 - Data_part com current_time.
SELECT date_part('hour', current_time);
SELECT date_part('minute', current_time);
SELECT date_part('second', current_time);
SELECT date_part('milliseconds', current_time);
4 - Data_part com current_time retornando hora, minuto, segundo e milésimos de segundo em uma só linha.
SELECT date_part('hour', current_time), date_part('minute', current_time), date_part('second', current_time), date_part('milliseconds', current_time);
5 - Date_part com current_timestamp.
SELECT date_part('dow', current_timestamp);
SELECT date_part('day', current_timestamp);
SELECT date_part('month', current_timestamp);
SELECT date_part('milliseconds', current_timestamp);
6 - Date_part com current_timestamp, retornando dia da semana, dia, mês e os milisegundos da hora corrente.
SELECT date_part('dow', current_timestamp), date_part('day', current_timestamp), date_part('month', current_timestamp), date_part('milliseconds', current_timestamp);
7 - Date_part com conversão da string para campos data/ hora/ timestamp.
SELECT date_part('day', date '12-12-2007');
SELECT date_part('month', date '12-12-2007');
SELECT date_part('hour', time '02:12:45');
SELECT date_part('minute', time '02:12:45');
SELECT date_part('year', timestamp '12-12-2007 02:12:45');
SELECT date_part('hour', timestamp '12-12-2007 02:12:45');
8 - Sintaxes utilizando interval.
SELECT date_part('year', interval '4 years 3 months');
SELECT date_part('month', interval '4 years 3 months');
SELECT date_part('hour', interval '12 hour 10 minutes 12 seconds');
SELECT date_part('minute', interval '12 hour 10 minutes 15 seconds');
SELECT date_part('second', interval '12 hour 10 minutes 15 seconds');
quinta-feira, 11 de outubro de 2007
Ótimo Livro Brasileiro de PostgreSQL!!!

O livro "Dominando o PostgreSQL", de Jorge Luiz Gonzaga, cobre as principais funções do banco, desde a instalação até a construção de funções e triggers. É uma ótima opção para quem utiliza versões 8.X. Não costumo comentar livros, mas ele tem se revelado uma ótima fonte.
Ficha técnica:
- Dominando o PostgreSQL
Autor: Gonzaga, Jorge Luiz
Editora: Ciência Moderna
ISBN: 9788573935592
Idioma: Português
Páginas: 244
Publicação: 2007
Edição: 1
Encadernação: Brochura
Peso: 512.00 gramas (!)
Pontos fortes:
- Grande Abrangência. São 36 capítulos falando de quase todos os aspectos desta tecnologia, incluindo instalação Linux e Windows.
- Suporte à linguagem SQL bastante detalhado, com muitos exemplos de sintaxes alternativas que aumentama produtividade.
- Cobre as versões 8.x, o que a maioria dos livros nacionais ainda não faz.
Pontos fracos:
- Ausência de índice remissivo (aquele que fica no fim da página)
- Certos temas mereciam maior detalhamento, como o WAL - Write-Ahead Log.
- O livro como um todo poderia ter textos mais detalhados. Os capítulos são muito curtos e os textos diretos demais, resultando em poucas páginas por capítulo.
Conclusão: é um ótimo livro. Não conheço melhor livro em português. E você?
segunda-feira, 8 de outubro de 2007
PostgreSQL 8.3 Beta Liberado para Testes
Não recomendada para uso comercial, estas versão aguarda que você faça seu download e testes. Ah, você já pode baixar na página do programa de beta testes do PostgreSQL: Seja um Beta Tester.
Novas funcionalidades:
- Melhorias de desempenho como alterações para o Distributed Checkpoint, Commit Assíncrono entre outros recursos
- TSearch2 para busca em texto passa a ser integrada ao código e sintaxe mais amigável. (Possível tema para próximos posts)
- SQL:XML syntax. (Precisa de comentário? Tenho de testar isso logo!!!)
- Logging para arquivos CSV carregáveis no banco.
- Rebuilding automático de planos de execução de consultas em cache. (ótima idéia de melhoria de desempenho)
- ENUMs, UUIDs and arrays of tipos complexos.
- Suporte de autenticação para GSSAPI e SSPI. (o que diabos é isso?)
Podemos colaborar bastante baixand, testando o beta e encaminhando as alterações.
Documentação completa das novidades nas Release Notes.
Novas funcionalidades:
- Melhorias de desempenho como alterações para o Distributed Checkpoint, Commit Assíncrono entre outros recursos
- TSearch2 para busca em texto passa a ser integrada ao código e sintaxe mais amigável. (Possível tema para próximos posts)
- SQL:XML syntax. (Precisa de comentário? Tenho de testar isso logo!!!)
- Logging para arquivos CSV carregáveis no banco.
- Rebuilding automático de planos de execução de consultas em cache. (ótima idéia de melhoria de desempenho)
- ENUMs, UUIDs and arrays of tipos complexos.
- Suporte de autenticação para GSSAPI e SSPI. (o que diabos é isso?)
Podemos colaborar bastante baixand, testando o beta e encaminhando as alterações.
Documentação completa das novidades nas Release Notes.
quinta-feira, 4 de outubro de 2007
A Função TIMEOFDAY
A função timeofday() retorna um texto com a data e hora. Não é muito utilizada.
Exemplos:
1 - Sintaxe básica.
select timeofday();
Retorno: "Thu Oct 04 12:33:55.953000 2007 BRT"
Exemplos:
1 - Sintaxe básica.
select timeofday();
Retorno: "Thu Oct 04 12:33:55.953000 2007 BRT"
Função NOW
Função equivalente a CURRENT_TIMESTAMP. Pode ser utilizada em consultas, alterações, inserções e exclusões de registros.
Exemplos:
1 - Sintaxe básica.
select now();
Retorno: "2007-10-04 11:24:15.718-03"
2 - Consulta com outra função.
select now(), current_timestamp;
Retorno: "2007-10-04 11:25:11.625-03";"2007-10-04 11:25:11.625-03"
3 - Uso de NOW() em inserção.
insert into testedata values (current_date, current_time, now());
4 - Uso de NOW() em consulta.
select * from testedata where ctimestamp = now();
Exemplos:
1 - Sintaxe básica.
select now();
Retorno: "2007-10-04 11:24:15.718-03"
2 - Consulta com outra função.
select now(), current_timestamp;
Retorno: "2007-10-04 11:25:11.625-03";"2007-10-04 11:25:11.625-03"
3 - Uso de NOW() em inserção.
insert into testedata values (current_date, current_time, now());
4 - Uso de NOW() em consulta.
select * from testedata where ctimestamp = now();
quarta-feira, 3 de outubro de 2007
CURRENT_DATE, CURRENT_TIME e CURRENT_TIMESTAMP
São funções que retornam respectivamente a data atual, a hora corrente e o timestamp (data + hora) registrado no relógio do computador. Podem ser utilizadas na inserção, atualização, consulta e exclusão de dados.
Exemplos:
1 - Retornando a data atual.
SELECT current_date;
2 - Retornando a hora atual.
SELECT current_time;
3 - Retornando o timestamp corrente.
SELECT current_timestamp;
4 - Consulta retornando current_date, current_time e current_timestamp.
SELECT current_date, current_time, current_timestamp;
5 - Utilização das funções para inserção, alteração e exclusão de dados.
CREATE TABLE testedata(
cdata DATE,
ctime TIME,
ctimestamp timestamp);
insert into testedata values (current_date, current_time, current_timestamp);
insert into testedata values ('2007-10-21', '11:04:50.123', '2007-10-21 11:04:50.123');
update testedata set cdata = current_date;
delete from testedata where cdata <> current_date;
6 - Utilização das funções para consultas aos dados.
select * from testedata where ctime <> current_time;
Exemplos:
1 - Retornando a data atual.
SELECT current_date;
2 - Retornando a hora atual.
SELECT current_time;
3 - Retornando o timestamp corrente.
SELECT current_timestamp;
4 - Consulta retornando current_date, current_time e current_timestamp.
SELECT current_date, current_time, current_timestamp;
5 - Utilização das funções para inserção, alteração e exclusão de dados.
CREATE TABLE testedata(
cdata DATE,
ctime TIME,
ctimestamp timestamp);
insert into testedata values (current_date, current_time, current_timestamp);
insert into testedata values ('2007-10-21', '11:04:50.123', '2007-10-21 11:04:50.123');
update testedata set cdata = current_date;
delete from testedata where cdata <> current_date;
6 - Utilização das funções para consultas aos dados.
select * from testedata where ctime <> current_time;
Comandos de Manipulação de DATA/ HORA
O PostgreSQL manipula campos tipo data e hora com muita desenvoltura. Apresenta ainda o tipo de dados timestamp que engloba data e hora no mesmo campo. As principais funções de manipulação de datas são:
- current_date
- current_time
- current_timestamp
- now()
- timeofday()
- date_part
- date_trunc
- extract
Estas funções podem ser utilizadas na inserção, atualizações e exclusão dos dados, como será exemplificado nos próximos posts.
- current_date
- current_time
- current_timestamp
- now()
- timeofday()
- date_part
- date_trunc
- extract
Estas funções podem ser utilizadas na inserção, atualizações e exclusão dos dados, como será exemplificado nos próximos posts.
quinta-feira, 27 de setembro de 2007
Site da PG Conference 2007 Funcionando!
O site da PG Conference 2007 do Brasil já está no ar.
As pré inscrições estão abertas, com um grande desconto (70%) aos que se anteciparem.
É só seguir o link abaixo:
PG Conference 2007
As pré inscrições estão abertas, com um grande desconto (70%) aos que se anteciparem.
É só seguir o link abaixo:
PG Conference 2007
quinta-feira, 20 de setembro de 2007
PostgreSQL - Versões Antigas Desativadas
Mensagem de Dave Page, do PostgreSQL Core Team, informa que as primeiras versões do PostgreSQL para Windows serão descontinuadas (8.0 and 8.1), sem a geração de novas atualizações e correções de bugs.
A razão desta descontinuidade seria a dificuldade de se corrigir certos problemas em todas as versões, processo que subtrai recursos do desenvolvimento de novas versões. Em certos casos a correção de bugs exigiria muito tempo e isso colaborou bastante para esta decisão.
Os usuários são aconselhados a migrar para a versão 8.2 e para a nova 8.3 cujo lançamento se aproxima. A versão 8.2 e as posteriores são consideradas maduras e devem durar tanto na plataforma Windows quanto as geradas para outros sistemas operacionais.
Os comandos para backup e recuperação podem ser utilizados para esta migração e você pode encontra-los nos posts anteriores.
A razão desta descontinuidade seria a dificuldade de se corrigir certos problemas em todas as versões, processo que subtrai recursos do desenvolvimento de novas versões. Em certos casos a correção de bugs exigiria muito tempo e isso colaborou bastante para esta decisão.
Os usuários são aconselhados a migrar para a versão 8.2 e para a nova 8.3 cujo lançamento se aproxima. A versão 8.2 e as posteriores são consideradas maduras e devem durar tanto na plataforma Windows quanto as geradas para outros sistemas operacionais.
Os comandos para backup e recuperação podem ser utilizados para esta migração e você pode encontra-los nos posts anteriores.
terça-feira, 18 de setembro de 2007
O PostgreSQL não é perfeito. Nem o Oracle também...
O PostgreSQL não é perfeito. Nem o Oracle também. No blog do Telles foram colocados dois textos com as desvantagens de um banco sobre o outro. Vale a pena conferir.
Oracle tem 16 recursos que fariam falta ao PostgreSQL
PostgreSQL tem 17 recursos que fariam falta ao Oracle
Oracle tem 16 recursos que fariam falta ao PostgreSQL
PostgreSQL tem 17 recursos que fariam falta ao Oracle
sexta-feira, 14 de setembro de 2007
Relatório do IDC Ignora PostgreSQL e MySQL!!!
Relatório recente do IDC sequer listou os bancos de Dados MySql e PostgreSQL no seu relatório "Worldwide RDBMS 2006 Vendor Shares: Preliminary Results for the Top 5 Vendors". O resultado é que os dados foram anexados à propaganda da Microsoft.
Como não há qualquer menção no texto a software livre, PostgreSQL ou MySQL, parece que a pesquisa ignorou a utilização destes programas pelas organizações. Na verdade, o texto do relatório coloca "Vendors" de software livre e não ferramentas, eliminando do escopo os programas livres para a mesma finalidade e apresentando uma versão deturpada do mercado.

Crítica adicional pode ser feita ao fato de serem apresentados apenas os TOP 5. Se o sexto maior vendedor de bancos de dados tiver uma boa solução ela sequer será mencionada. Só podem haver "TOP 5 VENDORS". Passando disto, é concorrência demais.
Consulte e tire suas conclusões.
Mas nem tudo são críticas e más notícias: o mercado cresceu mais de 14% no período, estimulando a contratação de bons profissionais para a gestãod e infra-estruturas de banco de dados.
Agora fiquei com uma dúvida: onde consultar o market share do PostgreSQL?
Como não há qualquer menção no texto a software livre, PostgreSQL ou MySQL, parece que a pesquisa ignorou a utilização destes programas pelas organizações. Na verdade, o texto do relatório coloca "Vendors" de software livre e não ferramentas, eliminando do escopo os programas livres para a mesma finalidade e apresentando uma versão deturpada do mercado.

Crítica adicional pode ser feita ao fato de serem apresentados apenas os TOP 5. Se o sexto maior vendedor de bancos de dados tiver uma boa solução ela sequer será mencionada. Só podem haver "TOP 5 VENDORS". Passando disto, é concorrência demais.
Consulte e tire suas conclusões.
Mas nem tudo são críticas e más notícias: o mercado cresceu mais de 14% no período, estimulando a contratação de bons profissionais para a gestãod e infra-estruturas de banco de dados.
Agora fiquei com uma dúvida: onde consultar o market share do PostgreSQL?
Assinar:
Postagens (Atom)