1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 15:52:13 +01:00
Files
2024-12-16 14:37:44 +03:00

118 lines
4.8 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 02b075821852f44e97742ba6f586cc2fa3272806 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="pdo-pgsql.lobcreate" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>Pdo\Pgsql::lobCreate</refname>
<refpurpose>Создает новый большой объект (LOB)</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis role="Pdo\\Pgsql">
<modifier>public</modifier> <type class="union"><type>string</type><type>false</type></type><methodname>Pdo\Pgsql::lobCreate</methodname>
<void/>
</methodsynopsis>
<simpara>
Метод <methodname>Pdo\Pgsql::lobCreate</methodname> создаёт большой объект
и возвращает OID, который на него ссылается.
Его можно открыть для чтения или записи данных
с помощью метода <methodname>Pdo\Pgsql::lobOpen</methodname>.
</simpara>
<simpara>
OID может храниться в столбцах типа OID и использоваться для ссылок
на большой объект, не вызывая произвольного роста строки.
Большой объект будет храниться в базе данных до тех пор,
пока его не удалят вызовом метода <methodname>Pdo\Pgsql::lobUnlink</methodname>.
</simpara>
<simpara>
Большие объекты громоздки в использовании.
Действительно, необходимо, чтобы метод <methodname>Pdo\Pgsql::lobUnlink</methodname> вызывался
до удаления последней строки, ссылающейся на OID во всей базе данных;
в противном случае большой объект без ссылок будут оставаться на сервере неопределенное время.
Кроме того, большие объекты не имеют контроля доступа.
Альтернативой является тип столбца bytea, размер которого может достигать 1 ГБ,
и этот тип столбца прозрачно управляет хранением для оптимального размера строки.
</simpara>
<note>
<simpara>
Функция и все манипуляции с большим объектом должны вызываться
и выполняться в рамках транзакции.
</simpara>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
&no.function.parameters;
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Метод возвращает OID только что созданного большого объекта
в случае успешного выполнения&return.falseforfailure;.
</simpara>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example xml:id="pdo-pgsql.lobcreate.example.basic">
<title>Пример использования метода <methodname>Pdo\Pgsql::lobCreate</methodname></title>
<simpara>
В примере создаётся новый большой объект и в него копируется содержимое файла.
Затем OID сохраняется в таблице.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$db = new Pdo\Pgsql('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$oid = $db->lobCreate();
$stream = $db->lobOpen($oid, 'w');
$local = fopen($filename, 'rb');
stream_copy_to_stream($local, $stream);
$local = null;
$stream = null;
$stmt = $db->prepare("INSERT INTO BLOBS (ident, oid) VALUES (?, ?)");
$stmt->execute([$some_id, $oid]);
$db->commit();
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><methodname>Pdo\Pgsql::lobOpen</methodname></member>
<member><methodname>Pdo\Pgsql::lobUnlink</methodname></member>
<member><function>pg_lo_create</function></member>
<member><function>pg_lo_open</function></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->