34.3. ÐлиенÑÑкие инÑеÑÑейÑÑ #
- 34.3.1. Создание болÑÑого обÑекÑа
- 34.3.2. ÐмпоÑÑ Ð±Ð¾Ð»ÑÑого обÑекÑа
- 34.3.3. ÐкÑпоÑÑ Ð±Ð¾Ð»ÑÑого обÑекÑа
- 34.3.4. ÐÑкÑÑÑие ÑÑÑеÑÑвÑÑÑего болÑÑого обÑекÑа
- 34.3.5. ÐапиÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð² болÑÑой обÑекÑ
- 34.3.6. ЧÑение даннÑÑ Ð¸Ð· болÑÑого обÑекÑа
- 34.3.7. ÐеÑемеÑение в болÑÑом обÑекÑе
- 34.3.8. ÐолÑÑение ÑекÑÑего Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² болÑÑом обÑекÑе
- 34.3.9. УÑеÑение болÑÑого обÑекÑа
- 34.3.10. ÐакÑÑÑие деÑкÑипÑоÑа болÑÑого обÑекÑа
- 34.3.11. Удаление болÑÑого обÑекÑа
- 34.3.2. ÐмпоÑÑ Ð±Ð¾Ð»ÑÑого обÑекÑа
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ ÑÑедÑÑва, коÑоÑÑе пÑедоÑÑавлÑÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека Postgres Pro libpq Ð´Ð»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº болÑÑим обÑекÑам. ÐнÑеÑÑÐµÐ¹Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами Postgres Pro Ñоздан по Ð¿Ð¾Ð´Ð¾Ð±Ð¸Ñ Ð¸Ð½ÑеÑÑейÑа ÑайловÑÑ
ÑиÑÑем Unix, Ñак ÑÑо он вклÑÑÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ ÑÑнкÑий open, read, write, lseek и Ñ. д.
ÐÑе опеÑаÑии Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами Ñ Ð¿Ñименением ÑÑиÑ
ÑÑнкÑий Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¼ÐµÑÑо в блоке ÑÑанзакÑии SQL, Ñак как деÑкÑипÑоÑÑ Ð±Ð¾Ð»ÑÑиÑ
обÑекÑов акÑÑалÑÐ½Ñ ÑолÑко во вÑÐµÐ¼Ñ ÑÑанзакÑии. ÐпеÑаÑии запиÑи, в Ñом ÑиÑле lo_open в Ñежиме INV_WRITE, не допÑÑкаÑÑÑÑ Ð² ÑиÑаÑÑиÑ
ÑÑанзакÑиÑÑ
.
ÐÑли пÑи вÑполнении одной из ÑÑиÑ
ÑÑнкÑий пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ñибка, ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, инаÑе невозможное, обÑÑно 0 или -1. СообÑение, опиÑÑваÑÑее оÑибкÑ, ÑоÑ
ÑанÑеÑÑÑ Ð² обÑекÑе ÑоединениÑ; полÑÑиÑÑ ÐµÐ³Ð¾ можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ PQerrorMessage.
ÐлиенÑÑкие пÑиложениÑ, коÑоÑÑе иÑполÑзÑÑÑ ÑÑи ÑÑнкÑии, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÐºÐ»ÑÑаÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑй Ñайл libpq/libpq-fs.h и компоноваÑÑÑÑ Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой libpq.
ÐлиенÑÑкие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ могÑÑ Ð¸ÑполÑзоваÑÑ ÑÑи ÑÑнкÑии, когда Ñоединение libpq Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² конвейеÑном Ñежиме.
34.3.1. Создание болÑÑого обÑекÑа #
Oid lo_create(PGconn *conn, Oid lobjId);
ÑоздаÑÑ Ð½Ð¾Ð²Ñй болÑÑой обÑекÑ. Ð lobjId можно задаÑÑ Ð½Ð°Ð·Ð½Ð°ÑаемÑй ÐµÐ¼Ñ OID; пÑи ÑÑом пÑоизойдÑÑ Ð¾Ñибка, еÑли ÑÑÐ¾Ñ OID Ñже пÑиÑвоен какомÑ-либо болÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ. ÐÑли в lobjId пеÑедаÑÑÑÑ InvalidOid (нолÑ), lo_create пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ ÑвободнÑй OID. ÐозвÑаÑаемÑм знаÑением бÑÐ´ÐµÑ OID, назнаÑеннÑй Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, либо InvalidOid (нолÑ) в ÑлÑÑае оÑибки.
ÐÑимеÑ:
inv_oid = lo_create(conn, desired_oid);
Oid lo_creat(PGconn *conn, int mode);
Ñакже ÑоздаÑÑ Ð½Ð¾Ð²Ñй болÑÑой обÑекÑ, вÑегда пÑиÑÐ²Ð°Ð¸Ð²Ð°Ñ ÐµÐ¼Ñ Ð½ÐµÐ¸ÑполÑзÑемÑй OID. ÐозвÑаÑаемое знаÑение â ÑÑо OID, пÑиÑвоеннÑй Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, или InvalidOid (нолÑ) в ÑлÑÑае оÑибки.
Ð PostgreSQL веÑÑии 8.1 и вÑÑе Ñежим игноÑиÑÑеÑÑÑ, Ñак ÑÑо вÑзов lo_creat полноÑÑÑÑ ÑавнознаÑен вÑÐ·Ð¾Ð²Ñ lo_create Ñ Ð½ÑлевÑм вÑоÑÑм аÑгÑменÑом. Ðднако едва ли ÑÑÐ¾Ð¸Ñ Ð¸ÑполÑзоваÑÑ lo_creat, еÑли вам не нÑжно ÑабоÑаÑÑ Ñ ÑеÑвеÑами веÑÑии ниже 8.1. ЧÑÐ¾Ð±Ñ ÑабоÑаÑÑ Ñ Ñаким ÑÑаÑÑм ÑеÑвеÑом, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ lo_creat, а не lo_create, и пеÑедаÑÑ Ð² аÑгÑменÑе Ñежим знаÑение INV_READ, INV_WRITE или INV_READ | INV_WRITE. (ÐÑи ÑимволиÑеÑкие конÑÑанÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² заголовоÑном Ñайле libpq/libpq-fs.h.)
ÐÑимеÑ:
inv_oid = lo_creat(conn, INV_READ|INV_WRITE);
34.3.2. ÐмпоÑÑ Ð±Ð¾Ð»ÑÑого обÑекÑа #
ЧÑÐ¾Ð±Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑ Ð² каÑеÑÑве болÑÑого обÑекÑа Ñайл опеÑаÑионной ÑиÑÑемÑ, вÑзовиÑе
Oid lo_import(PGconn *conn, const char *filename);
Ð filename задаÑÑÑÑ Ð¸Ð¼Ñ Ñайла в опеÑаÑионной ÑиÑÑеме, коÑоÑÑй бÑÐ´ÐµÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑован как болÑÑой обÑекÑ. ÐозвÑаÑаемÑм знаÑением бÑÐ´ÐµÑ OID, назнаÑеннÑй Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, либо InvalidOid (нолÑ) в ÑлÑÑае оÑибки. ÐамеÑÑÑе, ÑÑо ÑÑÐ¾Ñ Ñайл ÑиÑÐ°ÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека клиенÑÑкого инÑеÑÑейÑа, а не ÑеÑвеÑ; Ñаким обÑазом, он должен ÑÑÑеÑÑвоваÑÑ Ð² Ñайловой ÑиÑÑеме на ÑÑоÑоне клиенÑа и бÑÑÑ Ð´Ð¾ÑÑÑпнÑм Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¾Ð¼Ñ Ð¿ÑиложениÑ.
Oid lo_import_with_oid(PGconn *conn, const char *filename, Oid lobjId);
Ñакже импоÑÑиÑÑÐµÑ Ð½Ð¾Ð²Ñй болÑÑой обÑекÑ. Ð lobjId можно задаÑÑ Ð½Ð°Ð·Ð½Ð°ÑаемÑй ÐµÐ¼Ñ OID; пÑи ÑÑом пÑоизойдÑÑ Ð¾Ñибка, еÑли ÑÑÐ¾Ñ OID Ñже пÑиÑвоен какомÑ-либо болÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ. ÐÑли в lobjId пеÑедаÑÑÑÑ InvalidOid (нолÑ), lo_import_with_oid пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ ÑвободнÑй OID (Ñак же, как и lo_import). ÐозвÑаÑаемÑм знаÑением бÑÐ´ÐµÑ OID, назнаÑеннÑй Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð±Ð¾Ð»ÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, либо InvalidOid (нолÑ) в ÑлÑÑае оÑибки.
ФÑнкÑÐ¸Ñ lo_import_with_oid поÑвилаÑÑ Ð² PostgreSQL 8.4 и вÑзÑÐ²Ð°ÐµÑ Ð²Ð½ÑÑÑи lo_create, поÑвивÑÑÑÑÑ Ð² 8.1; еÑли попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÐµÑ Ñ ÑеÑвеÑом веÑÑии 8.0 или Ñанней, она завеÑÑиÑÑÑ Ð¾Ñибкой и возвÑаÑÐ¸Ñ InvalidOid.
34.3.3. ÐкÑпоÑÑ Ð±Ð¾Ð»ÑÑого обÑекÑа #
ЧÑÐ¾Ð±Ñ ÑкÑпоÑÑиÑоваÑÑ Ð±Ð¾Ð»ÑÑой обÑÐµÐºÑ Ð² Ñайл опеÑаÑионной ÑиÑÑемÑ, вÑзовиÑе
int lo_export(PGconn *conn, Oid lobjId, const char *filename);
РаÑгÑменÑе lobjId задаÑÑÑÑ OID ÑкÑпоÑÑиÑÑемого болÑÑого обÑекÑа, а в аÑгÑменÑе filename задаÑÑÑÑ Ð¸Ð¼Ñ Ñайла в опеÑаÑионной ÑиÑÑеме. ÐамеÑÑÑе, ÑÑо Ñайл запиÑÑваеÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой клиенÑÑкого инÑеÑÑейÑа, а не ÑеÑвеÑом. ÐозвÑаÑÐ°ÐµÑ 1 пÑи ÑÑпеÑном вÑполнении, -1 пÑи оÑибке.
34.3.4. ÐÑкÑÑÑие ÑÑÑеÑÑвÑÑÑего болÑÑого обÑекÑа #
ЧÑÐ¾Ð±Ñ Ð¾ÑкÑÑÑÑ ÑÑÑеÑÑвÑÑÑий болÑÑой обÑÐµÐºÑ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи, вÑзовиÑе
int lo_open(PGconn *conn, Oid lobjId, int mode);
РаÑгÑменÑе lobjId задаÑÑÑÑ OID оÑкÑÑваемого болÑÑого обÑекÑа. ÐиÑÑ Ð² аÑгÑменÑе mode опÑеделÑÑÑ, оÑкÑÑваеÑÑÑ Ð»Ð¸ Ñайл Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ (INV_READ), Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи (INV_WRITE), либо Ð´Ð»Ñ ÑÑениÑ/запиÑи. (ÐÑи конÑÑанÑÑ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð² заголовоÑном Ñайле libpq/libpq-fs.h.) ФÑнкÑÐ¸Ñ lo_open возвÑаÑÐ°ÐµÑ Ð´ÐµÑкÑипÑÐ¾Ñ Ð±Ð¾Ð»ÑÑого обÑекÑа (неоÑÑиÑаÑелÑнÑй) Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑÑнкÑиÑÑ
lo_read, lo_write, lo_lseek, lo_lseek64, lo_tell, lo_tell64, lo_truncate, lo_truncate64 и lo_close. ÐÑÐ¾Ñ Ð´ÐµÑкÑипÑÐ¾Ñ Ð°ÐºÑÑален ÑолÑко до завеÑÑÐµÐ½Ð¸Ñ ÑекÑÑей ÑÑанзакÑии. Ð ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ -1.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑеÑÐ²ÐµÑ Ð½Ðµ ÑазлиÑÐ°ÐµÑ ÑÐµÐ¶Ð¸Ð¼Ñ INV_WRITE и INV_READ | INV_WRITE: Ñ Ñаким деÑкÑипÑоÑом можно ÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе в лÑбом ÑлÑÑае. Ðднако еÑÑÑ Ð·Ð½Ð°ÑиÑелÑное оÑлиÑие ÑÑиÑ
Ñежимов Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñного INV_READ: Ñ Ð´ÐµÑкÑипÑоÑом INV_READ запиÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе нелÑзÑ, а даннÑе, ÑÑиÑÑваемÑе ÑеÑез него, бÑдÑÑ Ð¾ÑÑажаÑÑ ÑодеÑжимое болÑÑого обÑекÑа в Ñнимке ÑÑанзакÑии, коÑоÑÑй бÑл акÑивен пÑи вÑполнении lo_open, Ñо еÑÑÑ Ð½Ðµ бÑдÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, пÑоизведÑннÑе позже ÑÑой или дÑÑгими ÑÑанзакÑиÑми. ÐÑи ÑÑении Ñ Ð´ÐµÑкÑипÑоÑом INV_WRITE возвÑаÑаÑÑÑÑ Ð´Ð°Ð½Ð½Ñе, оÑÑажаÑÑие вÑе изменениÑ, пÑоизведÑннÑе дÑÑгими заÑикÑиÑованнÑми ÑÑанзакÑиÑми, а Ñакже ÑекÑÑей ÑÑанзакÑией. ÐÑо подобно ÑазлиÑиÑм Ñежимов REPEATABLE READ и READ COMMITTED Ð´Ð»Ñ Ð¾Ð±ÑÑнÑÑ
команд SQL SELECT.
ФÑнкÑÐ¸Ñ lo_open завеÑÑиÑÑÑ Ð¾Ñибкой, еÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава SELECT Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ болÑÑого обÑекÑа или еÑли Ñказан Ñлаг INV_WRITE и оÑÑÑÑÑÑвÑÐµÑ Ð¿Ñаво UPDATE. (Ðо PostgreSQL 11 пÑава пÑовеÑÑлиÑÑ Ð¿Ñи пеÑвом ÑакÑиÑеÑком вÑзове ÑÑнкÑии ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи Ñ ÑÑим деÑкÑипÑоÑом.) ÐÑклÑÑиÑÑ Ð½Ð¾Ð²Ñе пÑовеÑки можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа вÑемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ lo_compat_privileges.
ÐÑимеÑ:
inv_fd = lo_open(conn, inv_oid, INV_READ|INV_WRITE);
34.3.5. ÐапиÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð² болÑÑой обÑÐµÐºÑ #
int lo_write(PGconn *conn, int fd, const char *buf, size_t len);
запиÑÑÐ²Ð°ÐµÑ len Ð±Ð°Ð¹Ñ Ð¸Ð· бÑÑеÑа buf (коÑоÑÑй должен имеÑÑ ÑÐ°Ð·Ð¼ÐµÑ len) в деÑкÑипÑÐ¾Ñ Ð±Ð¾Ð»ÑÑого обÑекÑа fd. Ð fd должно пеÑедаваÑÑÑÑ Ð·Ð½Ð°Ñение, возвÑаÑÑнное пÑедÑдÑÑим вÑзовом lo_open. ÐозвÑаÑÐ°ÐµÑ ÑÑа ÑÑнкÑÐ¸Ñ ÑиÑло ÑакÑиÑеÑки запиÑаннÑÑ
Ð±Ð°Ð¹Ñ (в ÑекÑÑей ÑеализаÑии ÑÑо вÑегда len, еÑли ÑолÑко не пÑоизоÑла оÑибка). Ð ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ Ð·Ð½Ð°Ñение -1.
ХоÑÑ Ð¿Ð°ÑамеÑÑ len обÑÑвлен как size_t, ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение длинÑ, пÑевÑÑаÑÑее INT_MAX. Ðа пÑакÑике вÑÑ Ñавно лÑÑÑе пеÑедаваÑÑ Ð´Ð°Ð½Ð½Ñе ÑÑагменÑами не болÑÑе неÑколÑкиÑ
мегабайÑ.
34.3.6. ЧÑение даннÑÑ Ð¸Ð· болÑÑого обÑекÑа #
int lo_read(PGconn *conn, int fd, char *buf, size_t len);
ÑиÑÐ°ÐµÑ Ð´Ð¾ len Ð±Ð°Ð¹Ñ Ð¸Ð· деÑкÑипÑоÑа болÑÑого обÑекÑа fd в бÑÑÐµÑ buf (коÑоÑÑй должен имеÑÑ ÑÐ°Ð·Ð¼ÐµÑ len). Ð fd должно пеÑедаваÑÑÑÑ Ð·Ð½Ð°Ñение, возвÑаÑÑнное пÑедÑдÑÑим вÑзовом lo_open. ÐозвÑаÑÐ°ÐµÑ ÑÑа ÑÑнкÑÐ¸Ñ ÑиÑло ÑакÑиÑеÑки пÑоÑиÑаннÑÑ
байÑ; ÑÑо ÑиÑло должно бÑÑÑ Ð¼ÐµÐ½ÑÑе len, еÑли пÑи ÑÑении бÑл доÑÑигнÑÑ ÐºÐ¾Ð½ÐµÑ Ð¾Ð±ÑекÑа. Ð ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ -1.
ХоÑÑ Ð¿Ð°ÑамеÑÑ len обÑÑвлен как size_t, ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение длинÑ, пÑевÑÑаÑÑее INT_MAX. Ðа пÑакÑике вÑÑ Ñавно лÑÑÑе пеÑедаваÑÑ Ð´Ð°Ð½Ð½Ñе ÑÑагменÑами не болÑÑе неÑколÑкиÑ
мегабайÑ.
34.3.7. ÐеÑемеÑение в болÑÑом обÑекÑе #
ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑекÑÑее положение ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи, ÑвÑзанное Ñ Ð´ÐµÑкÑипÑоÑом болÑÑого обÑекÑа, вÑзовиÑе
int lo_lseek(PGconn *conn, int fd, int offset, int whence);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÐµÑемеÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ ÑекÑÑего Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´ÐµÑкÑипÑоÑа болÑÑого обÑекÑа fd в новое положение, заданное аÑгÑменÑом offset. ÐÐ»Ñ Ð°ÑгÑменÑа whence задаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ SEEK_SET (пеÑемеÑение Ð¾Ñ Ð½Ð°Ñала обÑекÑа), SEEK_CUR (пеÑемеÑение Ð¾Ñ ÑекÑÑего положениÑ) и SEEK_END (пеÑемеÑение Ð¾Ñ ÐºÐ¾Ð½Ñа обÑекÑа). ÐозвÑаÑÐ°ÐµÑ ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ð¾Ð²Ð¾Ðµ положение ÑказаÑелÑ, либо -1 в ÑлÑÑае оÑибки.
ÐпеÑиÑÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами, ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ð¿ÑевÑÑÐ°ÐµÑ 2 ÐÐ, иÑполÑзÑйÑе
pg_int64 lo_lseek64(PGconn *conn, int fd, pg_int64 offset, int whence);
ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как и lo_lseek, но Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ Ð·Ð½Ð°Ñение offset, пÑевÑÑаÑÑее 2 ÐÐ, и/или веÑнÑÑÑ ÑезÑлÑÑаÑ, пÑевÑÑаÑÑий 2 ÐÐ. ÐамеÑÑÑе, ÑÑо еÑли новое положение ÑказаÑÐµÐ»Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð·Ð° гÑаниÑей в 2ÐÐ, ÑÑнкÑÐ¸Ñ lo_lseek вÑдаÑÑ Ð¾ÑибкÑ.
ФÑнкÑÐ¸Ñ lo_lseek64 поÑвилаÑÑ Ð² PostgreSQL 9.3. ÐÑли попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÐµÑ Ñ ÑеÑвеÑом более ÑÑаÑой веÑÑии, пÑоизойдÑÑ Ð¾Ñибка и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено -1.
34.3.8. ÐолÑÑение ÑекÑÑего Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² болÑÑом обÑекÑе #
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑекÑÑее положение ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи Ð´Ð»Ñ Ð´ÐµÑкÑипÑоÑа болÑÑого обÑекÑа, вÑзовиÑе
int lo_tell(PGconn *conn, int fd);
ÐÑли Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка, возвÑаÑаеÑÑÑ -1.
ÐпеÑиÑÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами, ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑаÑÑ 2 ÐÐ, иÑполÑзÑйÑе
pg_int64 lo_tell64(PGconn *conn, int fd);
ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как lo_tell, но Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаваÑÑ ÑезÑлÑÑаÑ, пÑевÑÑаÑÑий 2 ÐÐ. ÐамеÑÑÑе, ÑÑо lo_tell вÑдаÑÑ Ð¾ÑибкÑ, еÑли ÑекÑÑее положение ÑÑениÑ/запиÑи оказÑваеÑÑÑ Ð·Ð° гÑаниÑей в 2 ÐÐ.
ФÑнкÑÐ¸Ñ lo_tell64 поÑвилаÑÑ Ð² PostgreSQL 9.3. ÐÑли попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÐµÑ Ñ ÑеÑвеÑом более ÑÑаÑой веÑÑии, пÑоизойдÑÑ Ð¾Ñибка и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено -1.
34.3.9. УÑеÑение болÑÑого обÑекÑа #
ЧÑÐ¾Ð±Ñ ÑÑеÑÑ Ð±Ð¾Ð»ÑÑой обÑÐµÐºÑ Ð´Ð¾ ÑÑебÑемой длинÑ, вÑзовиÑе
int lo_truncate(PGconn *conn, int fd, size_t len);
ÐÑа ÑÑнкÑÐ¸Ñ ÑÑÐµÐºÐ°ÐµÑ Ð±Ð¾Ð»ÑÑой обÑÐµÐºÑ Ñ Ð´ÐµÑкÑипÑоÑом fd до Ð´Ð»Ð¸Ð½Ñ len. Ð fd должно пеÑедаваÑÑÑÑ Ð·Ð½Ð°Ñение, возвÑаÑÑнное пÑедÑдÑÑим вÑзовом lo_open. ÐÑли len пÑевÑÑÐ°ÐµÑ ÑекÑÑÑÑ Ð´Ð»Ð¸Ð½Ñ Ð±Ð¾Ð»ÑÑого обÑекÑа, болÑÑой обÑÐµÐºÑ ÑаÑÑиÑÑеÑÑÑ Ð´Ð¾ заданной Ð´Ð»Ð¸Ð½Ñ Ð½ÑлевÑми байÑами ('\0'). Ð ÑлÑÑае ÑÑпеÑ
а lo_truncate возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð»Ñ, а пÑи оÑибке возвÑаÑаеÑÑÑ -1.
Ðоложение ÑÑениÑ/запиÑи, ÑвÑзанное Ñ Ð´ÐµÑкÑипÑоÑом fd, пÑи ÑÑом не менÑеÑÑÑ.
ХоÑÑ Ð¿Ð°ÑамеÑÑ len обÑÑвлен как size_t, lo_truncate не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение длинÑ, пÑевÑÑаÑÑее INT_MAX.
ÐпеÑиÑÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами, ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑаÑÑ 2 ÐÐ, иÑполÑзÑйÑе
int lo_truncate64(PGconn *conn, int fd, pg_int64 len);
ÐÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как lo_truncate, но Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ len, пÑевÑÑаÑÑие 2 ÐÐ.
ФÑнкÑÐ¸Ñ lo_truncate поÑвилаÑÑ Ð² PostgreSQL 8.3; еÑли попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÐµÑ Ñ ÑеÑвеÑом более ÑÑаÑой веÑÑии, пÑоизойдÑÑ Ð¾Ñибка и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено -1.
ФÑнкÑÐ¸Ñ lo_truncate64 поÑвилаÑÑ Ð² PostgreSQL 9.3; еÑли попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÐµÑ Ñ ÑеÑвеÑом более ÑÑаÑой веÑÑии, пÑоизойдÑÑ Ð¾Ñибка и бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено -1.
34.3.10. ÐакÑÑÑие деÑкÑипÑоÑа болÑÑого обÑекÑа #
ÐеÑкÑипÑÐ¾Ñ Ð±Ð¾Ð»ÑÑого обÑекÑа можно закÑÑÑÑ, вÑзвав
int lo_close(PGconn *conn, int fd);
ÐдеÑÑ fd â деÑкÑипÑÐ¾Ñ Ð±Ð¾Ð»ÑÑого обÑекÑа, возвÑаÑÑннÑй ÑÑнкÑией lo_open. Ð ÑлÑÑае ÑÑпеÑ
а lo_close возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð»Ñ. ÐÑи оÑибке возвÑаÑаеÑÑÑ -1.
ÐÑе деÑкÑипÑоÑÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±ÑекÑов, оÑÑаÑÑиеÑÑ Ð¾ÑкÑÑÑÑми в конÑе ÑÑанзакÑии, закÑÑваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки.
34.3.11. Удаление болÑÑого обÑекÑа #
ЧÑÐ¾Ð±Ñ ÑдалиÑÑ Ð±Ð¾Ð»ÑÑой обÑÐµÐºÑ Ð¸Ð· Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , вÑзовиÑе
int lo_unlink(PGconn *conn, Oid lobjId);
РаÑгÑменÑе lobjId задаÑÑÑÑ OID болÑÑого обÑекÑа, коÑоÑÑй нÑжно ÑдалиÑÑ. Ð ÑлÑÑае ÑÑпеÑ
а возвÑаÑаеÑÑÑ 1, а в ÑлÑÑае оÑибки -1.