Movatterモバイル変換


[0]ホーム

URL:



Facebook
Postgres Pro
Facebook
Downloads
32.12. Large Objects
Prev UpChapter 32. ECPG - EmbeddedSQL in CHome Next

32.12. Large Objects

Large objects are not directly supported by ECPG, but ECPG application can manipulate large objects through the libpq large object functions, obtaining the necessaryPGconn object by calling theECPGget_PGconn() function. (However, use of theECPGget_PGconn() function and touchingPGconn objects directly should be done very carefully and ideally not mixed with other ECPG database access calls.)

For more details about theECPGget_PGconn(), seeSection 32.11. For information about the large object function interface, seeChapter 31.

Large object functions have to be called in a transaction block, so when autocommit is off,BEGIN commands have to be issued explicitly.

Example 32.2 shows an example program that illustrates how to create, write, and read a large object in an ECPG application.

Example 32.2. ECPG Program Accessing Large Objects

#include <stdio.h>#include <stdlib.h>#include <libpq-fe.h>#include <libpq/libpq-fs.h>EXEC SQL WHENEVER SQLERROR STOP;intmain(void){    PGconn     *conn;    Oid         loid;    int         fd;    char        buf[256];    int         buflen = 256;    char        buf2[256];    int         rc;    memset(buf, 1, buflen);    EXEC SQL CONNECT TO testdb AS con1;    EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT;    conn = ECPGget_PGconn("con1");    printf("conn = %p\n", conn);    /* create */    loid = lo_create(conn, 0);    if (loid &lt; 0)        printf("lo_create() failed: %s", PQerrorMessage(conn));    printf("loid = %d\n", loid);    /* write test */    fd = lo_open(conn, loid, INV_READ|INV_WRITE);    if (fd &lt; 0)        printf("lo_open() failed: %s", PQerrorMessage(conn));    printf("fd = %d\n", fd);    rc = lo_write(conn, fd, buf, buflen);    if (rc &lt; 0)        printf("lo_write() failed\n");    rc = lo_close(conn, fd);    if (rc &lt; 0)        printf("lo_close() failed: %s", PQerrorMessage(conn));    /* read test */    fd = lo_open(conn, loid, INV_READ);    if (fd &lt; 0)        printf("lo_open() failed: %s", PQerrorMessage(conn));    printf("fd = %d\n", fd);    rc = lo_read(conn, fd, buf2, buflen);    if (rc &lt; 0)        printf("lo_read() failed\n");    rc = lo_close(conn, fd);    if (rc &lt; 0)        printf("lo_close() failed: %s", PQerrorMessage(conn));    /* check */    rc = memcmp(buf, buf2, buflen);    printf("memcmp() = %d\n", rc);    /* cleanup */    rc = lo_unlink(conn, loid);    if (rc &lt; 0)        printf("lo_unlink() failed: %s", PQerrorMessage(conn));    EXEC SQL COMMIT;    EXEC SQL DISCONNECT ALL;    return 0;}


Prev Home Next
32.11. Library Functions Up 32.13. C++ Applications
pdfepub
Go to Postgres Pro Standard 9.6
By continuing to browse this website, you agree to the use of cookies. Go toPrivacy Policy.

[8]ページ先頭

©2009-2025 Movatter.jp