mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Convert information from man pages. Not really suitable for man pages
anyway, so this will replace them as of now.
This commit is contained in:
parent
4b11e394bc
commit
45816ec4d2
348
doc/src/sgml/bki.sgml
Normal file
348
doc/src/sgml/bki.sgml
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
<!--
|
||||||
|
$Header: /cvsroot/pgsql/doc/src/sgml/bki.sgml,v 1.1 1998/08/15 06:49:33 thomas Exp $
|
||||||
|
|
||||||
|
Transcribed from the original bki.man.5 documentation
|
||||||
|
- Thomas Lockhart 1998-08-03
|
||||||
|
-->
|
||||||
|
|
||||||
|
<chapter id="bki">
|
||||||
|
<title>Backend Interface</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Backend Interface (<acronym>BKI</acronym>) files are scripts that are input
|
||||||
|
to the <productname>Postgres</productname>
|
||||||
|
backend running in the special "bootstrap" mode that allows it to perform
|
||||||
|
database functions without a database system already existing. <acronym>BKI</acronym> files
|
||||||
|
can therefore be used to create the database system in the first place.
|
||||||
|
<application>initdb</application>
|
||||||
|
uses <acronym>BKI</acronym> files to do just that: to create a database system. However,
|
||||||
|
<application>initdb</application>'s
|
||||||
|
<acronym>BKI</acronym> files are generated internally. It generates them using the files
|
||||||
|
<filename>global1.bki.source</filename> and <filename>local1.template1.bki.source</filename>, which it finds in the
|
||||||
|
<productname>Postgres</productname> "library" directory. They get installed there as part of installing
|
||||||
|
<productname>Postgres</productname>. These .source files get build as part of the <productname>Postgres</productname> build
|
||||||
|
process, by a build program called
|
||||||
|
<application>genbki</application>.
|
||||||
|
<application>genbki</application>
|
||||||
|
takes as input <productname>Postgres</productname> source files that double as
|
||||||
|
<application>genbki</application>
|
||||||
|
input that builds tables and C header files that describe those
|
||||||
|
tables.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Related information may be found in documentation for
|
||||||
|
<application>initdb</application>,
|
||||||
|
<application>createdb</application>,
|
||||||
|
and the <acronym>SQL</acronym> command <command>CREATE DATABASE</command>.
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title><acronym>BKI</acronym> File Format</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <productname>Postgres</productname> backend interprets <acronym>BKI</acronym> files as described below. This
|
||||||
|
description will be easier to understand if the <filename>global1.bki.source</filename> file is
|
||||||
|
at hand as an example. (As explained above, this .source file isn't quite
|
||||||
|
a <acronym>BKI</acronym> file, but you'll be able to guess what the resulting <acronym>BKI</acronym> file would be
|
||||||
|
anyway).
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Commands are composed of a command name followed by space separated
|
||||||
|
arguments. Arguments to a command which begin with a <quote>$</quote> are
|
||||||
|
treated specially. If <quote>$$</quote> are the first two characters, then
|
||||||
|
the first <quote>$</quote> is ignored and the argument is then processed
|
||||||
|
normally. If the <quote>$</quote> is followed by space, then it is treated
|
||||||
|
as a NULL
|
||||||
|
value. Otherwise, the characters following the <quote>$</quote> are
|
||||||
|
interpreted as the name of a macro causing the argument to be replaced
|
||||||
|
with the macro's value. It is an error for this macro to be
|
||||||
|
undefined.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Macros are defined using
|
||||||
|
<programlisting>
|
||||||
|
define macro macro_name = macro_value
|
||||||
|
</programlisting>
|
||||||
|
and are undefined using
|
||||||
|
<programlisting>
|
||||||
|
undefine macro macro_name
|
||||||
|
</programlisting>
|
||||||
|
and redefined using the same syntax as define.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Lists of general commands and macro commands
|
||||||
|
follow.
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>General Commands</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
OPEN <replaceable class="parameter">classname</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Open the class called
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
for further manipulation.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
CLOSE [<replaceable class="parameter">classname</replaceable>]
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Close the open class called
|
||||||
|
<replaceable class="parameter">classname</replaceable>.
|
||||||
|
It is an error if
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
is not already opened. If no
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
is given, then the currently open class is closed.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
PRINT
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Print the currently open class.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
INSERT [OID=<replaceable class="parameter">oid_value</replaceable>] (<replaceable class="parameter">value1</replaceable> <replaceable class="parameter">value2</replaceable> ...)
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Insert a new instance to the open class using
|
||||||
|
<replaceable class="parameter">value1</replaceable>,
|
||||||
|
<replaceable class="parameter">value2</replaceable>,
|
||||||
|
etc., for its attribute values and
|
||||||
|
<replaceable class="parameter">oid_value</replaceable>
|
||||||
|
for its OID. If
|
||||||
|
<replaceable class="parameter">oid_value</replaceable>
|
||||||
|
is not <quote>0</quote>, then this value will be used as the instance's
|
||||||
|
object identifier. Otherwise, it is an error.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
INSERT (<replaceable class="parameter">value1</replaceable> <replaceable class="parameter">value2</replaceable> ...)
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
As above, but the system generates a unique object identifier.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
CREATE <replaceable class="parameter">classname</replaceable> (<replaceable class="parameter">name1</replaceable> = <replaceable class="parameter">type1</replaceable> [,<replaceable class="parameter">name2</replaceable> = <replaceable class="parameter">type2</replaceable>[,...]])
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Create a class named
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
with the attributes given in parentheses.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
OPEN (<replaceable class="parameter">name1</replaceable> = <replaceable class="parameter">type1</replaceable> [,<replaceable class="parameter">name2</replaceable> = <replaceable class="parameter">type2</replaceable>[,...]]) AS <replaceable class="parameter">classname</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Open a class named
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
for writing but do not record its existence in the system catalogs.
|
||||||
|
(This is primarily to aid in bootstrapping.)
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
DESTROY <replaceable class="parameter">classname</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Destroy the class named
|
||||||
|
<replaceable class="parameter">classname</replaceable>.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
DEFINE INDEX <replaceable class="parameter">indexname</replaceable> ON <replaceable class="parameter">class_name</replaceable> USING <replaceable class="parameter">amname</replaceable>
|
||||||
|
(<replaceable class="parameter">opclass</replaceable> <replaceable class="parameter">attr</replaceable> | (<replaceable class="parameter">function</replaceable>(<replaceable class="parameter">attr</replaceable>))
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Create an index named
|
||||||
|
<replaceable class="parameter">indexname</replaceable>
|
||||||
|
on the class named
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
using the
|
||||||
|
<replaceable class="parameter">amname</replaceable>
|
||||||
|
access method. The fields to index are called
|
||||||
|
<replaceable class="parameter">name1</replaceable>,
|
||||||
|
<replaceable class="parameter">name2</replaceable>
|
||||||
|
etc., and the operator collections to use are
|
||||||
|
<replaceable class="parameter">collection_1</replaceable>,
|
||||||
|
<replaceable class="parameter">collection_2</replaceable>
|
||||||
|
etc., respectively.
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
This last sentence doesn't reference anything in the example. Should be changed to make sense. - Thomas 1998-08-04
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Macro Commands</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
DEFINE FUNCTION <replaceable class="parameter">macro_name</replaceable> AS <replaceable class="parameter">rettype</replaceable> <replaceable class="parameter">function_name</replaceable>(<replaceable class="parameter">args</replaceable>)
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Define a function prototype for a function named
|
||||||
|
<replaceable class="parameter">macro_name</replaceable>
|
||||||
|
which has its value of type
|
||||||
|
<replaceable class="parameter">rettype</replaceable>
|
||||||
|
computed from the execution
|
||||||
|
<replaceable class="parameter">function_name</replaceable>
|
||||||
|
with the arguments
|
||||||
|
<replaceable class="parameter">args</replaceable>
|
||||||
|
declared in a C-like manner.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
DEFINE MACRO <replaceable class="parameter">macro_name</replaceable> FROM FILE <replaceable class="parameter">filename</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Define a macro named
|
||||||
|
<replaceable class="parameter">macro_name</replaceable>
|
||||||
|
which has its value
|
||||||
|
read from the file called
|
||||||
|
<replaceable class="parameter">filename</replaceable>.
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Debugging Commands</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
This section on debugging commands was commented-out in the original documentation. Thomas 1998-08-05
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
r
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Randomly print the open class.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
m -1
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Toggle display of time information.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
m 0
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set retrievals to now.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
m 1 Jan 1 01:00:00 1988
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set retrievals to snapshots of the specfied time.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
m 2 Jan 1 01:00:00 1988, Feb 1 01:00:00 1988
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Set retrievals to ranges of the specified times.
|
||||||
|
Either time may be replaced with space
|
||||||
|
if an unbounded time range is desired.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
&A <replaceable class="parameter">classname</replaceable> <replaceable class="parameter">natts</replaceable> <replaceable class="parameter">name1</replaceable> <replaceable class="parameter">type1</replaceable> <replaceable class="parameter">name2</replaceable> <replaceable class="parameter">type2</replaceable> <replaceable class="parameter">...</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Add
|
||||||
|
<replaceable class="parameter">natts</replaceable>
|
||||||
|
attributes named
|
||||||
|
<replaceable class="parameter">name1</replaceable>,
|
||||||
|
<replaceable class="parameter">name2</replaceable>,
|
||||||
|
etc. of
|
||||||
|
types
|
||||||
|
<replaceable class="parameter">type1</replaceable>,
|
||||||
|
<replaceable class="parameter">type2</replaceable>,
|
||||||
|
etc. to the class
|
||||||
|
<replaceable class="parameter">classname</replaceable>.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
&RR <replaceable class="parameter">oldclassname</replaceable> <replaceable class="parameter">newclassname</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Rename the
|
||||||
|
<replaceable class="parameter">oldclassname</replaceable>
|
||||||
|
class to
|
||||||
|
<replaceable class="parameter">newclassname</replaceable>.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
&RA classname oldattname newattname
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
<replaceable class="parameter">oldattname</replaceable>
|
||||||
|
<replaceable class="parameter">newattname</replaceable>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Rename the
|
||||||
|
<replaceable class="parameter">oldattname</replaceable>
|
||||||
|
attribute in the class named
|
||||||
|
<replaceable class="parameter">classname</replaceable>
|
||||||
|
to
|
||||||
|
<replaceable class="parameter">newattname</replaceable>.
|
||||||
|
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Example</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following set of commands will create the <quote>pg_opclass</quote>
|
||||||
|
class containing the
|
||||||
|
<parameter>int_ops</parameter>
|
||||||
|
collection as an object with an OID of
|
||||||
|
<parameter>421</parameter>,
|
||||||
|
print out the class, and then close it.
|
||||||
|
<programlisting>
|
||||||
|
create pg_opclass (opcname=name)
|
||||||
|
open pg_opclass
|
||||||
|
insert oid=421 (int_ops)
|
||||||
|
print
|
||||||
|
close pg_opclass
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
</chapter>
|
181
doc/src/sgml/page.sgml
Normal file
181
doc/src/sgml/page.sgml
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
<chapter id="page">
|
||||||
|
|
||||||
|
<title>Page Files</title>
|
||||||
|
|
||||||
|
<abstract>
|
||||||
|
<para>
|
||||||
|
A description of the database file default page format.
|
||||||
|
</para>
|
||||||
|
</abstract>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This section provides an overview of the page format used by <productname>Postgres</productname>
|
||||||
|
classes. User-defined access methods need not use this page format.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In the following explanation, a
|
||||||
|
<firstterm>byte</firstterm>
|
||||||
|
is assumed to contain 8 bits. In addition, the term
|
||||||
|
<firstterm>item</firstterm>
|
||||||
|
refers to data which is stored in <productname>Postgres</productname> classes.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following table shows how pages in both normal <productname>Postgres</productname> classes
|
||||||
|
and <productname>Postgres</productname> index
|
||||||
|
classes (e.g., a B-tree index) are structured.
|
||||||
|
|
||||||
|
<table tocentry="1">
|
||||||
|
<title>Sample Page Layout</title>
|
||||||
|
<titleabbrev>Page Layout</titleabbrev>
|
||||||
|
<tgroup cols="1">
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
itemPointerData
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
filler
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
itemData...
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
Unallocated Space
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
ItemContinuationData
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
Special Space
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
``ItemData 2''
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
``ItemData 1''
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
ItemIdData
|
||||||
|
</entry>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
PageHeaderData
|
||||||
|
</entry>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
.\" Running
|
||||||
|
.\" .q .../bin/dumpbpages
|
||||||
|
.\" or
|
||||||
|
.\" .q .../src/support/dumpbpages
|
||||||
|
.\" as the postgres superuser
|
||||||
|
.\" with the file paths associated with
|
||||||
|
.\" (heap or B-tree index) classes,
|
||||||
|
.\" .q .../data/base/<database-name>/<class-name>,
|
||||||
|
.\" will display the page structure used by the classes.
|
||||||
|
.\" Specifying the
|
||||||
|
.\" .q -r
|
||||||
|
.\" flag will cause the classes to be
|
||||||
|
.\" treated as heap classes and for more information to be displayed.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The first 8 bytes of each page consists of a page header
|
||||||
|
(PageHeaderData).
|
||||||
|
Within the header, the first three 2-byte integer fields
|
||||||
|
(<firstterm>lower</firstterm>,
|
||||||
|
<firstterm>upper</firstterm>,
|
||||||
|
and
|
||||||
|
<firstterm>special</firstterm>)
|
||||||
|
represent byte offsets to the start of unallocated space, to the end
|
||||||
|
of unallocated space, and to the start of <firstterm>special space</firstterm>.
|
||||||
|
Special space is a region at the end of the page which is allocated at
|
||||||
|
page initialization time and which contains information specific to an
|
||||||
|
access method. The last 2 bytes of the page header,
|
||||||
|
<firstterm>opaque</firstterm>,
|
||||||
|
encode the page size and information on the internal fragmentation of
|
||||||
|
the page. Page size is stored in each page because frames in the
|
||||||
|
buffer pool may be subdivided into equal sized pages on a frame by
|
||||||
|
frame basis within a class. The internal fragmentation information is
|
||||||
|
used to aid in determining when page reorganization should occur.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Following the page header are item identifiers
|
||||||
|
(<firstterm>ItemIdData</firstterm>).
|
||||||
|
New item identifiers are allocated from the first four bytes of
|
||||||
|
unallocated space. Because an item identifier is never moved until it
|
||||||
|
is freed, its index may be used to indicate the location of an item on
|
||||||
|
a page. In fact, every pointer to an item
|
||||||
|
(<firstterm>ItemPointer</firstterm>)
|
||||||
|
created by <productname>Postgres</productname> consists of a frame number and an index of an item
|
||||||
|
identifier. An item identifier contains a byte-offset to the start of
|
||||||
|
an item, its length in bytes, and a set of attribute bits which affect
|
||||||
|
its interpretation.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The items themselves are stored in space allocated backwards from
|
||||||
|
the end of unallocated space. Usually, the items are not interpreted.
|
||||||
|
However when the item is too long to be placed on a single page or
|
||||||
|
when fragmentation of the item is desired, the item is divided and
|
||||||
|
each piece is handled as distinct items in the following manner. The
|
||||||
|
first through the next to last piece are placed in an item
|
||||||
|
continuation structure
|
||||||
|
(<firstterm>ItemContinuationData</firstterm>).
|
||||||
|
This structure contains
|
||||||
|
itemPointerData
|
||||||
|
which points to the next piece and the piece itself. The last piece
|
||||||
|
is handled normally.
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Files</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<filename>data/</filename>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Location of shared (global) database files.
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<filename>data/base/</filename>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Location of local database files.
|
||||||
|
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<sect1>
|
||||||
|
<title>Bugs</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The page format may change in the future to provide more efficient
|
||||||
|
access to large objects.
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This section contains insufficient detail to be of any assistance in
|
||||||
|
writing a new access method.
|
||||||
|
|
||||||
|
</chapter>
|
Loading…
x
Reference in New Issue
Block a user