C++ e PostgreSQL: como unir programação de sistemas e bancos de dados relacionais
\n\nVocê já se perguntou por que muitos sistemas de alta carga — desde servidores de jogos até plataformas financeiras — escolhem a combinação C++ e PostgreSQL? A resposta é simples: C++ oferece velocidade relâmpago e controle sobre a memória, enquanto PostgreSQL oferece confiabilidade e poderosos recursos SQL. Este não é apenas "mais um tutorial". É um guia prático que o levará desde a instalação do driver até a escrita de uma aplicação CRUD completa em C++ com PostgreSQL.
\n\nNeste artigo, você aprenderá:
\n- \n
- Como instalar e configurar o libpq — o cliente oficial do PostgreSQL para C++. \n
- Como executar consultas SELECT, INSERT, UPDATE e DELETE. \n
- Como tratar erros e trabalhar com transações. \n
- Exemplos de código real que podem ser usados imediatamente em seus projetos. \n
Pronto? Vamos lá!
\n\nPasso 1. Instalação do libpq e preparação do ambiente
\n\nAntes de escrever código, é necessário instalar a biblioteca libpq. Ela faz parte do cliente PostgreSQL. Se você já tem o PostgreSQL instalado, o libpq já está presente. Caso contrário, instale-o separadamente.
\n\nLinux (Ubuntu/Debian)
\nsudo apt update\nsudo apt install libpq-dev postgresql-server-dev-all\n\nmacOS (Homebrew)
\nbrew install postgresql\n\nWindows
\nBaixe o instalador do site oficial do PostgreSQL e, durante a instalação, selecione o componente "Development Libraries".
\n\nApós a instalação, verifique se o compilador g++ consegue encontrar a biblioteca. Para isso, ao compilar, será necessário adicionar as flags -lpq (linkagem com libpq) e, possivelmente, -I/caminho/para/include.
Passo 2. Conexão ao banco de dados em C++
\n\nVamos começar pelo mais importante — estabelecer a conexão. Para isso, utiliza-se a estrutura PGconn e a função PQconnectdb().
Exemplo: conexão simples
\n#include <iostream>\n#include <libpq-fe.h>\n\nint main() {\n // Parâmetros de conexão\n const char* conninfo = "host=localhost port=5432 dbname=mydb user=myuser password=mypass";\n\n // Estabelece a conexão\n PGconn* conn = PQconnectdb(conninfo);\n\n // Verifica o status\n if (PQstatus(conn) != CONNECTION_OK) {\n std::cerr << "Erro de conexão: " << PQerrorMessage(conn) << std::endl;\n PQfinish(conn);\n return 1;\n }\n\n std::cout << "Conexão ao PostgreSQL bem-sucedida!" << std::endl;\n\n // Fecha a conexão\n PQfinish(conn);\n return 0;\n}\n\nImportante: nunca coloque senhas diretamente no código. Use variáveis de ambiente ou arquivos de configuração. O exemplo acima é apenas para fins ilustrativos.
\n\nCompile:
\ng++ -o connect connect.cpp -lpq\n\nPasso 3. Execução de consultas SQL: SELECT, INSERT, UPDATE, DELETE
\n\nAgora que a conexão está estabelecida, vamos aprender a executar consultas. Para isso, utiliza-se a função PQexec(), que retorna o resultado na forma da estrutura PGresult.
Exemplo: execução de SELECT
\nPGresult* res = PQexec(conn, "SELECT id, name, age FROM users");\n\nif (PQresultStatus(res) != PGRES_TUPLES_OK) {\n std::cerr << "Erro na consulta: " << PQerrorMessage(conn) << std::endl;\n PQclear(res);\n PQfinish(conn);\n return 1;\n}\n\n// Obtém o número de linhas e colunas\nint rows = PQntuples(res);\nint cols = PQnfields(res);\n\n// Exibe os cabeçalhos das colunas\nfor (int i = 0; i < cols; ++i) {\n std::cout << PQfname(res, i) << "\\t";\n}\nstd::cout << std::endl;\n\n// Exibe os dados\nfor (int i = 0; i < rows; ++i) {\n for (int j = 0; j < cols; ++j) {\n std::cout << PQgetval