F.11. dblink
- dblink_connect — открывает постоянное подключение к удалённой базе данных
- dblink_connect_u — открывает постоянное подключение к удалённой базе данных, небезопасно
- dblink_disconnect — закрывает постоянное подключение к удалённой базе данных
- dblink — выполняет запрос в удалённой базе данных
- dblink_exec — выполняет команду в удалённой базе данных
- dblink_open — открывает курсор в удалённой базе данных
- dblink_fetch — возвращает строки из открытого курсора в удалённой базе данных
- dblink_close — закрывает курсор в текущей базе данных
- dblink_get_connections — возвращает имена всех открытых именованных подключений dblink
- dblink_error_message — выдаёт сообщение последней ошибки для именованного подключения
- dblink_send_query — передаёт асинхронный запрос в удалённую базу данных
- dblink_is_busy — проверяет, не выполняется ли через подключение асинхронный запрос
- dblink_get_notify — выдаёт асинхронные уведомления подключения
- dblink_get_result — получает результат асинхронного запроса
- dblink_cancel_query — отменяет любой активный запрос в заданном подключении
- dblink_get_pkey — возвращает позиции и имена полей первичного ключа отношения
- dblink_build_sql_insert — формирует оператор INSERT из локального кортежа, заменяя значения полей первичного ключа переданными альтернативными значениями
- dblink_build_sql_delete — формирует оператор DELETE со значениями, передаваемыми для полей первичного ключа
- dblink_build_sql_update — формирует оператор UPDATE из локального кортежа, заменяя значения первичного ключа переданными альтернативными значениями
Модуль dblink
обеспечивает подключения к другим базам данных PostgreSQL из сеанса базы данных.
См. также описание модуля postgres_fdw, который предоставляет примерно ту же функциональность, но через более современную и стандартизированную инфраструктуру.
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 necessary PGconn
object by calling the ECPGget_PGconn()
function. (However, use of the ECPGget_PGconn()
function and touching PGconn
objects directly should be done very carefully and ideally not mixed with other ECPG database access calls.)
For more details about the ECPGget_PGconn()
, see Section 34.11. For information about the large object function interface, see Chapter 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; int main(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 < 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 < 0) printf("lo_open() failed: %s", PQerrorMessage(conn)); printf("fd = %d\n", fd); rc = lo_write(conn, fd, buf, buflen); if (rc < 0) printf("lo_write() failed\n"); rc = lo_close(conn, fd); if (rc < 0) printf("lo_close() failed: %s", PQerrorMessage(conn)); /* read test */ fd = lo_open(conn, loid, INV_READ); if (fd < 0) printf("lo_open() failed: %s", PQerrorMessage(conn)); printf("fd = %d\n", fd); rc = lo_read(conn, fd, buf2, buflen); if (rc < 0) printf("lo_read() failed\n"); rc = lo_close(conn, fd); if (rc < 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 < 0) printf("lo_unlink() failed: %s", PQerrorMessage(conn)); EXEC SQL COMMIT; EXEC SQL DISCONNECT ALL; return 0; }