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
epubpdf
Go to Postgres Pro Standard 11
By continuing to browse this website, you agree to the use of cookies. Go toPrivacy Policy.

[8]ページ先頭

©2009-2025 Movatter.jp