#include <stdio.h>
#include <stdlib.h>

#include <libpq-fe.h>

#define MAX_BUF_SZ	8192

void
exit_nicely(PGconn *conn)
{
	PQfinish(conn);
	exit(1);
}

int
main(void)
{
	PGconn		*conn;
	PGresult	*res;
	const char	 fname[] = "newimage.jpg";
	FILE		*fp;
	char		*s;
	int			 len;

	conn = PQconnectdb("dbname=test");
	if (PQstatus(conn) != CONNECTION_OK)
	{
		fprintf(stderr, "Error: PQconnectdb: %s", PQerrorMessage(conn));
		exit_nicely(conn);
	}

	res = PQexecParams(conn, "SELECT data FROM file_arch LIMIT 1",
					   0, NULL, NULL, NULL, NULL, 1);
	if (PQresultStatus(res) != PGRES_TUPLES_OK)
	{
		fprintf(stderr, "Error: PQexecParams: %s", PQerrorMessage(conn));
		PQclear(res);
		exit_nicely(conn);
	}

	fp = fopen(fname, "w");
	if (!fp)
	{
		perror("fopen");
		PQclear(res);
		exit_nicely(conn);
	}

	len = PQgetlength(res, 0, 0);
	s = PQgetvalue(res, 0, 0);
	fwrite(s, sizeof(char), len, fp);
	
	fclose(fp);
	PQclear(res);
	PQfinish(conn);

	return 0;
}