diff options
author | Tatsuo Ishii | 2012-10-06 23:36:48 +0000 |
---|---|---|
committer | Tatsuo Ishii | 2012-10-06 23:36:48 +0000 |
commit | 461ef73f0977c95c9452680495bc161618db9227 (patch) | |
tree | ef9883b9fbbb57875a7ec7023fce944f840afb71 /doc/src/sgml/lobj.sgml | |
parent | ae835c7d6e202e99796c58093ef781477e54c459 (diff) |
Add API for 64-bit large object access. Now users can access up to
4TB large objects (standard 8KB BLCKSZ case). For this purpose new
libpq API lo_lseek64, lo_tell64 and lo_truncate64 are added. Also
corresponding new backend functions lo_lseek64, lo_tell64 and
lo_truncate64 are added. inv_api.c is changed to handle 64-bit
offsets.
Patch contributed by Nozomi Anzai (backend side) and Yugo Nagata
(frontend side, docs, regression tests and example program). Reviewed
by Kohei Kaigai. Committed by Tatsuo Ishii with minor editings.
Diffstat (limited to 'doc/src/sgml/lobj.sgml')
-rw-r--r-- | doc/src/sgml/lobj.sgml | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/doc/src/sgml/lobj.sgml b/doc/src/sgml/lobj.sgml index 291409fde0b..66467e00f37 100644 --- a/doc/src/sgml/lobj.sgml +++ b/doc/src/sgml/lobj.sgml @@ -41,7 +41,7 @@ larger than a single database page into a secondary storage area per table. This makes the large object facility partially obsolete. One remaining advantage of the large object facility is that it allows values - up to 2 GB in size, whereas <acronym>TOAST</acronym>ed fields can be at + up to 4 TB in size, whereas <acronym>TOAST</acronym>ed fields can be at most 1 GB. Also, large objects can be randomly modified using a read/write API that is more efficient than performing such operations using <acronym>TOAST</acronym>. @@ -237,7 +237,9 @@ int lo_open(PGconn *conn, Oid lobjId, int mode); <function>lo_open</function> returns a (non-negative) large object descriptor for later use in <function>lo_read</function>, <function>lo_write</function>, <function>lo_lseek</function>, - <function>lo_tell</function>, and <function>lo_close</function>. + <function>lo_lseek64</function>, <function>lo_tell</function>, + <function>lo_tell64</function>, <function>lo_truncate</function>, + <function>lo_truncate64</function>, and <function>lo_close</function>. The descriptor is only valid for the duration of the current transaction. On failure, -1 is returned. @@ -312,6 +314,7 @@ int lo_read(PGconn *conn, int fd, char *buf, size_t len); large object descriptor, call <synopsis> int lo_lseek(PGconn *conn, int fd, int offset, int whence); +pg_int64 lo_lseek64(PGconn *conn, int fd, pg_int64 offset, int whence); </synopsis> <indexterm><primary>lo_lseek</></> This function moves the current location pointer for the large object descriptor identified by @@ -321,7 +324,16 @@ int lo_lseek(PGconn *conn, int fd, int offset, int whence); <symbol>SEEK_CUR</> (seek from current position), and <symbol>SEEK_END</> (seek from object end). The return value is the new location pointer, or -1 on error. + <indexterm><primary>lo_lseek64</></> <function>lo_lseek64</function> + is a function for large objects larger than 2GB. <symbol>pg_int64</> + is defined as 8-byte integer type. </para> +<para> + <function>lo_lseek64</> is new as of <productname>PostgreSQL</productname> + 9.3; if this function is run against an older server version, it will + fail and return a negative value. +</para> + </sect2> <sect2 id="lo-tell"> @@ -332,9 +344,17 @@ int lo_lseek(PGconn *conn, int fd, int offset, int whence); call <synopsis> int lo_tell(PGconn *conn, int fd); +pg_int64 lo_tell64(PGconn *conn, int fd); </synopsis> <indexterm><primary>lo_tell</></> If there is an error, the return value is negative. + <indexterm><primary>lo_tell64</></> <function>lo_tell64</function> is + a function for large objects larger than 2GB. +</para> +<para> + <function>lo_tell64</> is new as of <productname>PostgreSQL</productname> + 9.3; if this function is run against an older server version, it will + fail and return a negative value. </para> </sect2> @@ -345,6 +365,7 @@ int lo_tell(PGconn *conn, int fd); To truncate a large object to a given length, call <synopsis> int lo_truncate(PGcon *conn, int fd, size_t len); +int lo_truncate64(PGcon *conn, int fd, pg_int64 len); </synopsis> <indexterm><primary>lo_truncate</></> truncates the large object descriptor <parameter>fd</> to length <parameter>len</>. The @@ -352,6 +373,8 @@ int lo_truncate(PGcon *conn, int fd, size_t len); previous <function>lo_open</function>. If <parameter>len</> is greater than the current large object length, the large object is extended with null bytes ('\0'). + <indexterm><primary>lo_truncate64</></> <function>lo_truncate64</function> + is a function for large objects larger than 2GB. </para> <para> @@ -359,7 +382,7 @@ int lo_truncate(PGcon *conn, int fd, size_t len); </para> <para> - On success <function>lo_truncate</function> returns + On success <function>lo_truncate</function> and <function>lo_truncate64</function> returns zero. On error, the return value is negative. </para> @@ -368,6 +391,11 @@ int lo_truncate(PGcon *conn, int fd, size_t len); 8.3; if this function is run against an older server version, it will fail and return a negative value. </para> +<para> + <function>lo_truncate64</> is new as of <productname>PostgreSQL</productname> + 9.3; if this function is run against an older server version, it will + fail and return a negative value. +</para> </sect2> <sect2 id="lo-close"> |