Trabalhar com paginação de dados no PostgreSQL é muito fácil. As cláusulas usadas para paginação são LIMIT e OFFSET. A fórmula básica seria o seguinte:

   1: SELECT * FROM tabela 
   2:     LIMIT <número de itens por página> 
   3:     OFFSET(<página> - 1) * <número de itens por página>

Agora, os exemplos… Para trazer os 20 registros da página 2:

   1: SELECT * FROM tabela 
   2:     LIMIT 20
   3:     OFFSET (2 - 1) * 20
Muito fácil! :)

Posted in: PostgreSQL  Tags: ,
Admin posted on September 15, 2009 08:59

Uma dica rápida, mas que pode poupar um bom tempinho. Usar ORDER BY em queries que usam a cláusula UNION é bem mais simples do que parece. Suponhamos que temos duas tabelas, tb_cidades e tb_paises, e queremos trazer em uma única query o id e o nome tanto de tb_cidades quanto de tb_paises. Para isso combinamos duas queries SELECT usando a cláusula UNION:

SELECT c.cidade_id, c.nome FROM tb_cidades c
UNION
SELECT p.pais_id, p.nome FROM tb_paises p

Teremos assim, em uma única query, tanto cidades quanto países. Mas, e a ordenação?? É aí que muita gente se atrapalha, mas a solução é bem simples:

1) Atribua um alias em comum para as colunas que serão ordenadas. Se for a coluna de ID, coloque o mesmo alias tanto para cidades quanto para países.

2) Utilize este alias no ORDER BY.

Então vamos alterar a query acima para ordenar pela coluna nome de tb_cidades e tb_paises:

SELECT c.cidade_id, c.nome AS coluna_nome FROM tb_cidades c
UNION
SELECT p.pais_id, p.nome AS coluna_nome FROM tb_paises p
ORDER BY coluna_nome

Simples assim. Wink


Posted in: PostgreSQL  Tags: , ,

O PostgreSQL possui o operador de concatenação de strings || (dois pipes):

Suponhamos que nome = 'Rogério' e sobrenome 'Bragil'

SELECT (nome || ' ' || sobrenome) AS nome_completo FROM tabela

Isto retornará 'Rogério Bragil', pois houve a concatenação do campo nome ('Rogério'), do espaço e do campo sobrenome ('Bragil').


Admin posted on February 26, 2008 11:02

Uma funçãozinha para remover acentos de strings no PostgreSQL... Útil.

CREATE OR REPLACE FUNCTION sem_acentos(character varying) RETURNS character varying AS $BODY$

SELECT translate($1, 'áéíóúàèìòùãõâêîôôäëïöüçÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ', 'aeiouaeiouaoaeiooaeioucAEIOUAEIOUAOAEIOOAEIOUC')

$BODY$ LANGUAGE 'sql' VOLATILE;


Posted in: PostgreSQL  Tags: ,

Páginas

Calendário

«  March 2010  »
MoTuWeThFrSaSu
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234
View posts in large calendar