Movatterモバイル変換


[0]ホーム

URL:



Facebook
Postgres Pro
Facebook
Downloads
34.12. Large Objects
Prev UpChapter 34. ECPG — EmbeddedSQL in CHome Next

34.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 34.11. For information about the large object function interface, seeChapter 33.

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

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

Example 34.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 Up Next
34.11. Library Functions Home 34.13. C++ Applications
pdfepub
Go to Postgres Pro Standard 17
By continuing to browse this website, you agree to the use of cookies. Go toPrivacy Policy.

[8]ページ先頭

©2009-2025 Movatter.jp