Acessando PostgreSQL com C - Cursores

Veremos neste artigo como trabalhar com cursores através da libpq, utilizando a linguagem C.

[ Hits: 42.247 ]

Por: Poleto em 27/04/2006


Uma breve explicação sobre cursores



Um cursor é uma forma de percorrer um conjunto de resultados, geralmente retornados através de um comando select.

Um cursor sempre aponta para uma linha dentro do conjunto de dados retornados e, com o auxilio da libpq, podemos além de obter os valores, obter também informações sobre colunas, o que pode ser útil em alguns casos.

Uma outra vantagem da utilização de cursores é a redução da quantidade de memória exigida pelo programa que executou o select. Imagine uma consulta que retorne milhões de registros, isso exigiria uma enorme quantidade de memória alocada para armazenar o resultado da consulta. Além disso, geralmente estaremos trabalhando através de uma rede e a quantidade de dados que estará sendo transmitido pela rede será enorme.

Quando usamos a forma tradicional para recuperação de dados, o PostgreSQL obtém todos os dados da consulta e então os transmite pela rede de uma vez. Ao utilizar cursores, apenas uma linha é transmitida de cada vez conforme o cursor avança ou retrocede dentro do conjunto de dados. Isso, porém, pode se tornar um problema quando temos um conjunto de dados muito grande.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Uma breve explicação sobre cursores
   3. Declaração de cursores
   4. Retornando uma linha por vez
   5. Informações sobre colunas
   6. Acessando os dados recuperados
Outros artigos deste autor

PostgreSQL - Embutindo comandos SQL no seu código C

Instalando o CMS Drupal 4.7

Acessando PostgreSQL com C

Leitura recomendada

PostgreSQL - Embutindo comandos SQL no seu código C

Ensaio acerca de bibliotecas de código aberto para abstração de acesso a banco de dados em linguagem C++

Embutindo um banco de dados SQLite em sua aplicação C++

Usando MySQL na linguagem C

Acessando PostgreSQL com C

  
Comentários
[1] Comentário enviado por jragomes em 28/04/2006 - 14:02h

Parabéns pelo artigo, muito bem escrito e detalhado.

[2] Comentário enviado por madsonbraz em 02/05/2006 - 08:53h

Me tire uma duvida, é possivel criar um cluster com o postgresql?

[3] Comentário enviado por poleto em 02/05/2006 - 14:54h

madsonbraz,

E possivel sim, mas eu particularmente nao sei como.

[]'s
Poleto

[4] Comentário enviado por rjesus em 13/03/2007 - 11:20h

Olá, sou novo no linux, utilizoo o SUSE versão 10.1, tentei executar o exemplo que foi passado acima e obtive o seguinte resultado :
suse:/usr/include/pgsql # gcc $(pkg-config --libs --cflags gtk+-2.0) -g teste1.c
/tmp/ccc0dzwL.o: In function `main':
/usr/include/pgsql/teste1.c:13: undefined reference to `PQconnectdb'
/usr/include/pgsql/teste1.c:15: undefined reference to `PQstatus'
/usr/include/pgsql/teste1.c:28: undefined reference to `PQexec'
/usr/include/pgsql/teste1.c:21: undefined reference to `PQerrorMessage'
/usr/include/pgsql/teste1.c:22: undefined reference to `PQfinish'
/usr/include/pgsql/teste1.c:36: undefined reference to `PQresultStatus'
/usr/include/pgsql/teste1.c:42: undefined reference to `PQresultErrorMessage'
/usr/include/pgsql/teste1.c:45: undefined reference to `PQcmdTuples'
/usr/include/pgsql/teste1.c:53: undefined reference to `PQclear'
/usr/include/pgsql/teste1.c:59: undefined reference to `PQfinish'
collect2: ld returned 1 exit status
Alguêm poderia me ajudar ???
Obigado!

[5] Comentário enviado por poleto em 13/03/2007 - 15:04h

Fala rjesus,

Parece que você esqueceu alguns parâmetros para o gcc na hora de executar.
Dá uma olhada neste artigo que tem os detalhes necessários para compilar programas com suporte ao PostgreSQL:

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4169

Qualquer coisa grita.
[]'s
Poleto

[6] Comentário enviado por evaldobarbosa em 04/12/2008 - 15:36h

Eu resolvi o problema criando um arquivo que já automatiza esse negócio pra mim, saca só:

#!/bin/bash

rm cursores

g++ -o arquivo -I/usr/include/postgresql/ arquivo.cpp -lpq
#clear
echo ###### executando #####
if [ -x cursores ] ; then
./cursores
fi

exit 0


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts