예 1-1.libpq예제 프로그램 1
/*
* testLibpq.c
*
* libpq의 C 버전을 테스트하십시오.postg토토 사이트 순위qlFrontend
* 도서관.
*/
#include <stdio.h
#include <libpq-fe.h
무효의
exit_nicely (pgconn *conn)
pqfinish (conn);
출구 (1);
기본()
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbname;
int nfields;
INT I,
J;
/ * 파일 * 디버그; */
pgconn *conn;
pgresult *res;
/*
* 백엔드 연결의 매개 변수를 설정하여 시작합니다.
* 매개 변수는 null이면 시스템은 합리적인 사용을 시도합니다.
* 환경 변수를 찾거나 실패함으로써 기본값
* 하드 유선 상수 사용
*/
pghost = null; / * 백엔드 서버의 호스트 이름 */
pgport = null; / * 백엔드 서버의 포트 */
pgoptions = null; /* 백엔드를 시작하는 특별 옵션
* 서버 */
pgtty = null; / * 백엔드 서버의 TTY 디버깅 */
dbname = "template1";
/ * 데이터베이스에 연결 */
conn = pqsetdb (pghost, pgport, pgoptions, pgtty, dbname);
/*
* 백엔드 연결이 성공적으로 이루어 졌는지 확인하십시오.
*/
if (pqstatus (conn) == connection_bad)
fprintf (stderr, "데이터베이스 '%s'에 대한 연결 실패. \ n", dbname);
fprintf (stderr, "%s", pqerrormessage (conn));
exit_nicely (conn);
/* debug = fopen ( "/tmp/trace.out", "w"); */
/* pqtrace (Conn, Debug); */
/ * 거래 블록 시작 */
RES = PQEXEC (Conn, "시작");
if (! res || pqresultstatus (res)! = pgres_command_ok)
fprintf (stderr, "시작 명령 실패 \ n");
PQCLEAR (RES);
exit_nicely (conn);
/*
* pqclear pgresult가 더 이상 피할 필요가 없을 때마다
* 메모리 누출
*/
PQCLEAR (RES);
/*
* 시스템 카탈로그 인 PG_DATABASE의 행을 가져 오기
* 데이터베이스
*/
res = pqexec (conn, "pg_database에서 select *에서 mycursor cursor를 선언한다");
if (! res || pqresultstatus (res)! = pgres_command_ok)
fprintf (stderr, "cursor 명령 실패 \ n");
PQCLEAR (RES);
exit_nicely (conn);
PQCLEAR (RES);
RES = PQEXEC (Conn, "MyCursor에서 모두 가져 오기");
if (! res || pqresultstatus (res)! = pgres_tuples_ok)
fprintf (stderr, "모든 명령은 튜플을 올바르게 반환하지 않았다");
PQCLEAR (RES);
exit_nicely (conn);
/ * 먼저 속성 이름을 인쇄 */
nfields = pqnfields (res);
for (i = 0; i <nfields; i ++)
printf ( "%-15s", pqfname (res, i));
printf ( "\ n \ n");
/ * 다음으로 줄을 인쇄 */
for (i = 0; i <pqntuples (res); i ++)
for (j = 0; j <nfields; j ++)
printf ( "%-15s", pqgetValue (res, i, j));
printf ( "\ n");
PQCLEAR (RES);
/ * 커서를 닫습니다 */
RES = PQEXEC (Conn, "Close MyCursor");
PQCLEAR (RES);
/ * 거래 커밋 */
RES = PQEXEC (Conn, "Commit");
PQCLEAR (RES);
/ * 데이터베이스 연결을 닫고 정리 */
pqfinish (conn);
/* fclose (Debug); */
반환 0;
예 1-2.libpq예제 프로그램 2
/* * testlibpq2.c * 비동기식 알림 인터페이스 테스트 * *이 프로그램을 시작한 다음 다른 창의 PSQL에서 * TBL2 알림; * * 또는 공상을 원한다면 이것을 시도하십시오. * 다음과 함께 데이터베이스를 채우십시오. * * 테이블 TBL1 (I int4)을 만듭니다. * * 테이블 생성 tbl2 (i int4); * * tbl1에 삽입 된대로 규칙 R1을 만듭니다. * (tbl2 값 (new.i)에 삽입; TBL2 알림); * * 그리고 그렇게하십시오 * * TBL1 값 (10)에 삽입; * */ #include <stdio.h #include "libpq-fe.h" 무효의 exit_nicely (pgconn *conn) pqfinish (conn); 출구 (1); 기본() char *pghost, *pgport, *pgoptions, *pgtty; char *dbname; int nfields; INT I, J; pgconn *conn; pgresult *res; pgnotify *알림; /* * 백엔드 연결의 매개 변수를 설정하여 시작합니다. * 매개 변수는 null이면 시스템은 합리적인 사용을 시도합니다. * 환경 변수를 찾거나 실패함으로써 기본값 * 하드 유선 상수 사용 */ pghost = null; / * 백엔드 서버의 호스트 이름 */ pgport = null; / * 백엔드 서버의 포트 */ pgoptions = null; /* 백엔드를 시작하는 특별 옵션 * 서버 */ pgtty = null; / * 백엔드 서버의 TTY 디버깅 */ dbname = getenv ( "사용자"); /* 테스트 이름으로 변경하십시오 * 데이터베이스 */ / * 데이터베이스에 연결 */ conn = pqsetdb (pghost, pgport, pgoptions, pgtty, dbname); /* * 백엔드 연결이 성공적으로 이루어 졌는지 확인하십시오. */ if (pqstatus (conn) == connection_bad) fprintf (stderr, "데이터베이스 '%s'에 대한 연결 실패. \ n", dbname); fprintf (stderr, "%s", pqerrormessage (conn)); exit_nicely (conn); res = pqexec (conn, "청취 tbl2"); if (! res || pqresultstatus (res)! = pgres_command_ok) fprintf (stderr, "청취 명령 실패 \ n"); PQCLEAR (RES); exit_nicely (conn); /* * pqclear pgresult가 더 이상 피할 필요가 없을 때마다 * 메모리 누출 */ PQCLEAR (RES); 동안 (1) /* * 수표 사이를 조금 기다리십시오. select ()와 대기 * 더 효율적입니다. */ 수면 (1); / * 비동기 백엔드 메시지 수집 */ pqconsumeInput (conn); / * 비동기식 알림 메시지 */ while ((notify = pqnotifies (conn))! = null) fprintf (stderr, "Backend Pid '%d'에서 '%s'를 Async 알림 \ n", notify- relname, notify- be_pid); 무료 (알림); / * 데이터베이스 연결을 닫고 정리 */ pqfinish (conn); 반환 0;
예 1-3.libpq예제 프로그램 3
/*
* testlibpq3.c libpq의 c 버전, testPostg토토 사이트 순위QLFrontend
* 도서관. 이진 커서 인터페이스를 테스트합니다
*
*
*
* 다음을 수행하여 데이터베이스를 채우십시오.
*
* 테이블 테스트 1 (i int4, d real, p 다각형)을 만듭니다.
*
* test1 값 (1, 3.567, 다각형 '(3.0, 4.0, 1.0, 2.0)에 삽입;
*
* test1 값 (2, 89.05, 다각형 '(4.0, 3.0, 2.0, 1.0)'에 삽입;
*
* 예상 출력은 다음과 같습니다.
*
* 튜플 0 : got i = (4 바이트) 1, d = (4 바이트) 3.567000, p = (4
* 바이트) 2 포인트 boundbox = (hi = 3.000000/4.000000, lo =
* 1.000000,2.000000) 튜플 1 : got i = (4 바이트) 2, d = (4 바이트)
* 89.050003, p = (4 바이트) 2 points boundbox =
* (HI = 4.000000/3.000000, LO = 2.000000,1.000000)
*
*
*/
#include <stdio.h
#include "libpq-fe.h"
#include "utils/geo_decls.h"/ * * 다각형 유형 */
무효의
exit_nicely (pgconn *conn)
pqfinish (conn);
출구 (1);
기본()
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbname;
int nfields;
INT I,
J;
int i_fnum,
d_fnum,
p_fnum;
pgconn *conn;
pgresult *res;
/*
* 백엔드 연결의 매개 변수를 설정하여 시작합니다.
* 매개 변수는 null이면 시스템은 합리적인 사용을 시도합니다.
* 환경 변수를 찾거나 실패함으로써 기본값
* 하드 유선 상수 사용
*/
pghost = null; / * 백엔드 서버의 호스트 이름 */
pgport = null; / * 백엔드 서버의 포트 */
pgoptions = null; /* 백엔드를 시작하는 특별 옵션
* 서버 */
pgtty = null; / * 백엔드 서버의 TTY 디버깅 */
dbname = getenv ( "사용자"); /* 테스트 이름으로 변경하십시오
* 데이터베이스 */
/ * 데이터베이스에 연결 */
conn = pqsetdb (pghost, pgport, pgoptions, pgtty, dbname);
/*
* 백엔드 연결이 성공적으로 이루어 졌는지 확인하십시오.
*/
if (pqstatus (conn) == connection_bad)
fprintf (stderr, "데이터베이스 '%s'에 대한 연결 실패. \ n", dbname);
fprintf (stderr, "%s", pqerrormessage (conn));
exit_nicely (conn);
/ * 거래 블록 시작 */
RES = PQEXEC (Conn, "시작");
if (! res || pqresultstatus (res)! = pgres_command_ok)
fprintf (stderr, "시작 명령 실패 \ n");
PQCLEAR (RES);
exit_nicely (conn);
/*
* pqclear pgresult가 더 이상 피할 필요가 없을 때마다
* 메모리 누출
*/
PQCLEAR (RES);
/*
* 시스템 카탈로그 인 PG_DATABASE의 행을 가져 오기
* 데이터베이스
*/
res = pqexec (conn, "select * from test1에 대한 mycursor binary cursor를 선언한다");
if (! res || pqresultstatus (res)! = pgres_command_ok)
fprintf (stderr, "cursor 명령 실패 \ n");
PQCLEAR (RES);
exit_nicely (conn);
PQCLEAR (RES);
RES = PQEXEC (Conn, "MyCursor에서 모두 가져 오기");
if (! res || pqresultstatus (res)! = pgres_tuples_ok)
fprintf (stderr, "모든 명령은 튜플을 올바르게 반환하지 않았다");
PQCLEAR (RES);
exit_nicely (conn);
i_fnum = pqfnumber (res, "i");
d_fnum = pqfnumber (res, "d");
p_fnum = pqfnumber (res, "p");
for (i = 0; i <3; i ++)
printf ( "type [ %d] = %d, 크기 [ %d] = %d \ n",
i, pqftype (res, i),
i, pqfsize (res, i));
for (i = 0; i <pqntuples (res); i ++)
int *ival;
float *dval;
int plen;
다각형 *Pval;
/ * 우리는 이것을 우리가 알고있는 3 개의 필드에 이것을 하드 와이어 */
ival = (int *) pqgetValue (res, i, i_fnum);
dval = (float *) pqgetValue (res, i, d_fnum);
plen = pqgetlength (res, i, p_fnum);
/*
* Plen은 길이 필드를 포함하지 않으므로
* varhdsz의 증분
*/
pval = (다각형 *) malloc (plen + varhdrsz);
pval- size = plen;
memmove ((char *) 및 pval- npts, pqgetValue (res, i, p_fnum), plen);
printf ( "튜플 %d : got \ n", i);
printf ( "i = ( %d 바이트) %d, \ n",
pqgetlength (res, i, i_fnum), *ival);
printf ( "d = ( %d 바이트) %f, \ n",
pqgetlength (res, i, d_fnum), *dval);
printf ( "p = (%d 바이트)%d points \ tboundbox = (hi =%f/%f, lo =%f,%f) \ n",
pqgetlength (res, i, d_fnum),
pval- npts,
pval- boundbox.xh,
pval- boundbox.yh,
pval- boundbox.xl,
pval- boundbox.yl);
PQCLEAR (RES);
/ * 커서를 닫습니다 */
RES = PQEXEC (Conn, "Close MyCursor");
PQCLEAR (RES);
/ * 거래 커밋 */
RES = PQEXEC (Conn, "Commit");
PQCLEAR (RES);
/ * 데이터베이스 연결을 닫고 정리 */
pqfinish (conn);
반환 0;