Connect an application
This page documents the preview version (v2.21). Preview includes features under active development and is for development and testing only. For production, use the stable version (v2024.1). To learn more, see Versioning.
libpq is the C client library for connecting to and interacting with PostgreSQL databases. libpq is also the underlying engine used in other PostgreSQL application interfaces. The libpq client library supports the SCRAM-SHA-256 authentication method.
For details and documentation, refer to libpq - C Library for PostgreSQL 11 (on which YugabyteDB is based).
Prerequisites
The tutorial assumes that you have:
- installed YugabyteDB and created a universe. If not, follow the steps in Quick start.
- a 32-bit (x86) or 64-bit (x64) architecture machine.
- gcc 4.1.2 or later, clang 3.4 or later installed.
Install the libpq C driver
The libpq
C driver is included in the YugabyteDB installation. You can use it by setting the LD_LIBRARY_PATH
as follows :
$ export LD_LIBRARY_PATH=<yugabyte-install-dir>/postgres/lib
Alternatively, you can download the PostgreSQL binaries and source from the PostgreSQL Downloads page, and Homebrew users on macOS can install libpq using brew install libpq
.
Create the sample C application
Sample C code
Create a file ybsql_hello_world.c
and copy the contents below:
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
int
main(int argc, char **argv)
{
const char *conninfo;
PGconn *conn;
PGresult *res;
int nFields;
int i, j;
/* connection string */
conninfo = "host=127.0.0.1 port=5433 dbname=yugabyte user=yugabyte password=yugabyte";
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
/* Create table */
res = PQexec(conn, "CREATE TABLE employee (id int PRIMARY KEY, \
name varchar, age int, \
language varchar)");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "CREATE TABLE failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
PQclear(res);
printf("Created table employee\n");
/* Insert a row */
res = PQexec(conn, "INSERT INTO employee (id, name, age, language) \
VALUES (1, 'John', 35, 'C')");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "INSERT failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
PQclear(res);
printf("Inserted data (1, 'John', 35, 'C')\n");
/* Query the row */
res = PQexec(conn, "SELECT name, age, language FROM employee WHERE id = 1");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
/* print out the rows */
nFields = PQnfields(res);
for (i = 0; i < PQntuples(res); i++)
{
printf("Query returned: ");
for (j = 0; j < nFields; j++)
printf("%s ", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
return 0;
}
Run the application
You can compile the file using gcc
or clang
.
To compile the application withgcc
, run the following command:
$ gcc ybsql_hello_world.c -lpq -I<yugabyte-install-dir>/postgres/include -o ybsql_hello_world
Run with:
$ ./ybsql_hello_world
You should see the following output:
Created table employee
Inserted data (1, 'John', 35, 'C')
Query returned: John 35 C