Pg lo unlink: примеры (PHP)
pg_lo_unlink(PgSql\Connection $connection, int $oid): boolФункция pg_lo_unlink() в PHP используется для удаления больших объектов (Large Objects) из базы данных PostgreSQL. Эти объекты хранятся отдельно от таблиц и управляются через специальный интерфейс.
Функция применяется когда требуется удалить бинарные данные, такие как изображения, документы или медиафайлы, хранящиеся как большой объект. Она освобождает OID (идентификатор объекта) для повторного использования.
- connection (обязательный с PHP 8.0) - ресурс подключения к PostgreSQL. Если не указан, используется последнее открытое соединение.
- oid - целочисленный идентификатор большого объекта, который требуется удалить.
<?
$conn = pg_connect("dbname=test");
$oid = 12345;
$result = pg_lo_unlink($conn, $oid);
if ($result) {
echo 'Объект удален';
} else {
echo 'Ошибка удаления';
}
?>Объект удален
<?
pg_connect("dbname=test");
$oid = 54321;
// В PHP 8+ первый параметр обязателен
$result = pg_lo_unlink($oid);
var_dump($result);
?>bool(true)
Функции для импорта и экспорта больших объектов. Используются вместе с pg_lo_unlink() для полного цикла управления объектами.
Вместо больших объектов можно использовать тип данных bytea для хранения бинарных данных непосредственно в таблицах. Подход проще, но менее эффективен для очень больших файлов.
<?
pg_query($conn, "SELECT lo_unlink(12345)");
?>Прямой вызов функции базы данных lo_unlink через SQL запрос.
import psycopg2
conn = psycopg2.connect("dbname=test")
conn.cursor().execute("SELECT lo_unlink(12345)")
conn.commit()В Python используется прямое SQL выполнение вместо отдельной функции.
const { Client } = require('pg');
const client = new Client();
await client.connect();
await client.query('SELECT lo_unlink($1)', [12345]);Аналогичный подход с параметризованными запросами.
Pg lo unlink в MySQL
MySQL не имеет прямой аналогии, так как использует другой подход к хранению больших бинарных данных (тип LONGBLOB в таблицах).
<?
$result = pg_lo_unlink($conn, 999999);
var_dump($result);
?>bool(false)
Функция возвращает false при попытке удалить несуществующий объект.
<?
$oid = 12345;
$result = pg_lo_unlink($oid);
?>Fatal error: Uncaught ArgumentCountError: pg_lo_unlink() expects exactly 2 arguments, 1 given
В PHP 8.0 и выше оба аргумента стали обязательными.
<?
pg_lo_unlink($conn, $oid);
$result = pg_lo_unlink($conn, $oid);
var_dump($result);
?>bool(false)
Параметр connection стал обязательным. Ранее можно было использовать последнее открытое соединение по умолчанию.
Улучшена обработка ошибок. При сбое теперь выбрасывается предупреждение.
До PHP 4.2.0 функция называлась pg_lounlink(). Старое имя сохранилось как псевдоним.
<?
pg_query($conn, "BEGIN");
$oid = pg_lo_create($conn);
pg_lo_open($conn, $oid, "w");
// ... запись данных ...
pg_query($conn, "COMMIT");
// Удаление после использования
pg_lo_unlink($conn, $oid);
?>Удаление объекта после завершения работы с ним в рамках транзакции.
<?
$oids = [123, 456, 789];
foreach ($oids as $oid) {
if (pg_lo_unlink($conn, $oid)) {
echo "Удален объект $oid\n";
}
}
?>Удален объект 123 Удален объект 456 Объект 789 не найден
<?
class LargeObjectManager {
private $connection;
public function delete($oid) {
$result = pg_lo_unlink($this->connection, $oid);
if (!$result) {
throw new Exception("Не удалось удалить объект $oid");
}
return $result;
}
}
?>Обертка для безопасного удаления с обработкой ошибок.