---
name: "PQgetvf"
section: "3"
platform: "linux"
package: "libpqtypes-dev"
version: "1.5.1-9"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/PQgetf"
---

# PQgetvf(3)

Gets one or more values from a PGresult in a scanf fashion.

Part of [PQgetf(3)](/PQgetf/3.md).

## NAME

PQgetf - Gets one or more values from a PGresult in a scanf fashion.

## SYNOPSIS

**#include \<libpqtypes.h\>**\

**int PQgetf(const PGresult \****res***, int** *tup\_num***,**\
\
            **const char \****format***, ...);**\
 **int PQgetvf(const PGresult \****res***, int** *tup\_num***,**\
\
            **const char \****format***, va\_list ap);**

## DESCRIPTION

*The PQgetf() and PQgetvf() functions get one or more field* *values from a PGresult using a scanf style interface.  The tup\_num* *argument indicates which tuple to read values from; values can* *only be read from one tuple at a time.*

*The format argument is a data type specifier string* *indicating the values to retrieve, like %int4 or #timestamp.  Any* *number of fields, in any order, can be retrieved in a single call.* *Each data type specifier has a cooresponding* **field\_num, type-args, \[...\]** *contained within the function´s variable argument list.  The* **field\_num** *either indicates tuple field number or tuple field* *name, depending on whether the data type in format used a ´%´* *or ´#´ specifer mark (\`man [pqt-specs(3)](/pqt-specs/3.md)´).  The* **type-args** *can be one or more* *arguments required by the specific data type: for example, "%int4"* *would require a pointer to a PGint4.  All built-in PostgreSQL data* *types require a single pointer value.*

## RETURN VALUE

*On success, a non-zero value is returned.  On error, zero is* *returned and [PQgeterror(3)](/PQgeterror/3.md) will contain an error message.*

*If the retrieval of any field fails, the get operation is aborted and* *function will fail.  Eventhough some fields may have succeeded prior to* *the failure, their values should not be trusted.  Instead, make* *another PQgetf() call.  Getting an array or a composite can lead* *to memory leaks when getf fails.  This is because these types allocate* *a PGresult object that must be cleared.  To avoid leaks, it is recommended* *to perform cleanup even if getf fails, retrieve arrays and composites by* *themselves or make them the last field in a getf call.*

## EXAMPLES

### Using PQgetf on a PGresult

*The example uses the libpq PQexec function to execute a query and then uses* *PQgetf() to retrieve field values.  It is important to note that* *libpqtypes execution functions, like [PQparamExec(3)](/PQparamExec/3.md), do not need to* *generate the PGresult provided to PQgetf().*

```

```

**int success;** **PGint4 i4;** **PGtext text;** **PGbytea bytea;** **PGpoint pt;** **PGresult \*res = PQexec(conn, "SELECT i,t,b,p FROM tbl");**

**/\* Get some field values from the result (order doesn´t matter) \*/** **success = PQgetf(res,**\
 	**0,            /\* get field values from tuple 0 \*/**\
 	**"%int4 #text %bytea %point",**\
 	              **/\* type format specifiers (get text by name ´#´) \*/**\
 	**0,   &i4,     /\* get an int4 from field num 0 \*/**\
 	**"t", &text,   /\* get a text from field name "t" \*/**\
 	**2,   &bytea,  /\* get a bytea from field num 2 \*/**\
 	**3,   &pt);    /\* get a point from field num 3 \*/**

**/\* Output an error message using [PQgeterror(3)](/PQgeterror/3.md). \*/** **if(!success)**\
 	**fprintf(stderr, "\*ERROR: %s\\n", PQgeterror());**

**/\* Output the values, do this before PQclear() \*/** **else**\
 	**printf("int4=%d, text=%s, bytea=%d bytes, point=(%f,%f)\\n",**\
 		**i4, text, bytea.len, pt.x, pt.y);**

**PQclear(res);**

## AUTHOR

*A contribution of eSilo, LLC. for the PostgreSQL Database Management System.* *Written by Andrew Chernow and Merlin Moncure.*

## REPORTING BUGS

*Report bugs to \<libpqtypes@esilo.com\>.*

## COPYRIGHT

*Copyright (c) 2011 eSilo, LLC. All rights reserved.*\
 *This is free software; see the source for copying conditions.* *There is NO warranty; not even for MERCHANTABILITY or  FITNESS* *FOR A PARTICULAR PURPOSE.*

## SEE ALSO

*[pqt-specs(3)](/pqt-specs/3.md), [PQgeterror(3)](/PQgeterror/3.md)*
