2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.
포스트그레SQL
이전 42장. 대형 객체 다음

샘플 프로그램

/*--------------------------------------------------
          *
          * testlo.c--
          * libpq로 대형 객체를 사용하여 테스트
          *
          * 저작권 (c) 1994, 캘리포니아 대학교 리전트
          *
          *
          * 신원 확인
          * /usr/local/devel/pglite/cvs/src/doc/manual.me,v 1.16 1995/09/01 23:55:00 jolly Exp
          *
          *--------------------------------------------------
          */
         #include <stdio.h
         #include "libpq-fe.h"
         #include "libpq/libpq-fs.h"

         #BUFSIZE 1024 정의

         /*
          * importFile * "in_filename" 파일을 대형 개체 "lobjOid"로 데이터베이스에 가져오기
          *
          */
         Oid importFile(PG토토 핫 *토토 핫, char *파일 이름)

             oid lobjId;
             int lobj_fd;
             char buf[BUFSIZE];
             int nbytes, tmp;
             int fd;

             /*
              * 읽을 파일을 엽니다.
              */
             fd = open(파일명, O_RDONLY, 0666);
             if (fd < 0)  /* 오류 */
              fprintf(stderr, "유닉스 파일을 열 수 없습니다.

             /*
              * 대형 객체 생성
              */
             lobjId = lo_creat(토토 핫, INV_READ|INV_WRITE);
             if (lobjId == 0) 
              fprintf(stderr, "대형 객체를 생성할 수 없습니다.");

             lobj_fd = lo_open(토토 핫, lobjId, INV_WRITE);
             /*
              * Unix 파일에서 읽어와 반전 파일에 쓰기
              */
             while ((nbytes = read(fd, buf, BUFSIZE))  0) 
              tmp = lo_write(토토 핫, lobj_fd, buf, nbytes);
              if (tmp < nbytes) 
                  fprintf(stderr, "읽는 중 오류가 발생했습니다.

             (무효) 닫기(fd);
             (공허) lo_close(토토 핫, lobj_fd);

             lobjId를 반환합니다.

         무효 선택(PG토토 핫 *토토 핫, Oid lobjId, int start, int len)

             int lobj_fd;
             char* 버프;
             int nbytes;
             int nread;

             lobj_fd = lo_open(토토 핫, lobjId, INV_READ);
             if (lobj_fd < 0) 
              fprintf(stderr,"대형 개체 %d을(를) 열 수 없습니다",
                   lobjId);

             lo_lseek(토토 핫, lobj_fd, 시작, SEEK_SET);
             buf = malloc(len+1);

             읽기 = 0;
             while (len - nread  0) 
              nbytes = lo_read(토토 핫, lobj_fd, buf, len - nread);
              buf[nbytes] = ' ';
              fprintf(stderr," %s", buf);
              nread += nbytes;

             fprintf(stderr,"0);
             lo_close(토토 핫, lobj_fd);

         무효 덮어쓰기(PG토토 핫 *토토 핫, Oid lobjId, int start, int len)

             int lobj_fd;
             char* 버프;
             int nbytes;
             int로 작성됨;
             나는 int;

             lobj_fd = lo_open(토토 핫, lobjId, INV_READ);
             if (lobj_fd < 0) 
              fprintf(stderr,"대형 개체 %d을(를) 열 수 없습니다",
                   lobjId);

             lo_lseek(토토 핫, lobj_fd, 시작, SEEK_SET);
             buf = malloc(len+1);

             (i=0;i<len;i++)에 대해
              buf[i] = 'X';
             buf[i] = ' ';

             쓰여진 = 0;
             while (len - nwrite  0) 
              nbytes = lo_write(토토 핫, lobj_fd, buf + nwrite, len - nwrite);
              n기록 += nbytes;

             fprintf(stderr,"0);
             lo_close(토토 핫, lobj_fd);

         /*
          * importFile * 대형 개체 "lobjOid"를 "out_filename" 파일로 내보내기
          *
          */
         void importFile(PG토토 핫 *토토 핫, Oid lobjId, char *filename)

             int lobj_fd;
             char buf[BUFSIZE];
             int nbytes, tmp;
             int fd;

             /*
              * 반전 "객체" 생성
              */
             lobj_fd = lo_open(토토 핫, lobjId, INV_READ);
             if (lobj_fd < 0) 
              fprintf(stderr,"대형 개체 %d을(를) 열 수 없습니다",
                   lobjId);

             /*
              * 쓸 파일을 엽니다.
              */
             fd = open(파일명, O_CREAT|O_WRONLY, 0666);
             if (fd < 0)  /* 오류 */
              fprintf(stderr, "유닉스 파일을 열 수 없습니다.
                   파일명);

             /*
              * Unix 파일에서 읽어와 반전 파일에 쓰기
              */
             while ((nbytes = lo_read(토토 핫, lobj_fd, buf, BUFSIZE))  0) 
              tmp = write(fd, buf, nbytes);
                 if (tmp < nbytes) 
                  fprintf(stderr,"쓰기 중 오류가 발생했습니다.
                       파일명);

             (공허) lo_close(토토 핫, lobj_fd);
             (무효) 닫기(fd);

             반품;

         무효의
         exit_nicely(PG토토 핫* 토토 핫)

           PQfinish(콘);
           출구(1);

         정수
         메인(int argc, char **argv)

             char *in_filename, *out_filename;
             char *데이터베이스;
             Oid lobjOid;
             PG토토 핫 *콘;
             PGresult *res;

             if (argc != 4) 
              fprintf(stderr, "사용법: %s 데이터베이스_이름 in_filename out_filename0,
                   인수[0]);
              출구(1);

             데이터베이스 = argv[1];
             in_filename = argv[2];
             out_filename = argv[3];

             /*
              * 연결 설정
              */
             토토 핫 = PQsetdb(NULL, NULL, NULL, NULL, 데이터베이스);

             /* 백엔드 연결이 성공적으로 이루어졌는지 확인하세요 */
             if (PQstatus(토토 핫) == 토토 핫ECTION_BAD) 
              fprintf(stderr,"데이터베이스 '%s'에 대한 연결에 실패했습니다.0, 데이터베이스);
              fprintf(stderr,"%s",PQerrorMessage(토토 핫));
              exit_nicely(토토 핫);

             res = PQexec(토토 핫, "시작");
             PQclear(res);

             printf("파일을 가져오는 중입니다.
         /* lobjOid = importFile(토토 핫, in_filename); */
             lobjOid = lo_import(토토 핫, in_filename);
         /*
             printf("대형 객체 %d.0, lobjOid);

             printf("대형 객체의 1000-2000바이트를 선택합니다0);
             pickout(토토 핫, lobjOid, 1000, 1000);

             printf("대형 객체의 1000-2000바이트를 X's0으로 덮어쓰기);
             덮어쓰기(토토 핫, lobjOid, 1000, 1000);
         */

             printf("대형 객체를 파일로 내보내는 중입니다.
         /* importFile(토토 핫, lobjOid, out_filename); */
             lo_export(토토 핫, lobjOid,out_filename);

             res = PQexec(토토 핫, "끝");
             PQclear(res);
             PQfinish(콘);
             종료(0);

이전 다음
대형 액세스 중 LIBPQ의 객체 위로 ecpg - 내장 SQL C에서