mirror of https://github.com/postgres/postgres
Fix lots of bad markup, bad English, bad explanations. This commit covers only about half the contrib modules, but I grow weary...REL8_3_STABLE
parent
a37a0a4180
commit
53e99f57fc
@ -1,36 +1,40 @@ |
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/adminpack.sgml,v 1.3 2007/12/06 04:12:09 tgl Exp $ --> |
||||
|
||||
<sect1 id="adminpack"> |
||||
<title>adminpack</title> |
||||
|
||||
|
||||
<indexterm zone="adminpack"> |
||||
<primary>adminpack</primary> |
||||
</indexterm> |
||||
|
||||
<para> |
||||
adminpack is a PostgreSQL standard module that implements a number of |
||||
support functions which pgAdmin and other administration and management tools |
||||
can use to provide additional functionality if installed on a server. |
||||
<filename>adminpack</> provides a number of support functions which |
||||
<application>pgAdmin</> and other administration and management tools can |
||||
use to provide additional functionality, such as remote management |
||||
of server log files. |
||||
</para> |
||||
|
||||
<sect2> |
||||
<title>Functions implemented</title> |
||||
|
||||
<para> |
||||
Functions implemented by adminpack can only be run by a superuser. Here's a |
||||
list of these functions: |
||||
</para> |
||||
<para> |
||||
<programlisting> |
||||
int8 pg_catalog.pg_file_write(fname text, data text, append bool) |
||||
bool pg_catalog.pg_file_rename(oldname text, newname text, archivname text) |
||||
bool pg_catalog.pg_file_rename(oldname text, newname text) |
||||
bool pg_catalog.pg_file_unlink(fname text) |
||||
setof record pg_catalog.pg_logdir_ls() |
||||
|
||||
/* Renaming of existing backend functions for pgAdmin compatibility */ |
||||
int8 pg_catalog.pg_file_read(fname text, data text, append bool) |
||||
bigint pg_catalog.pg_file_length(text) |
||||
int4 pg_catalog.pg_logfile_rotate() |
||||
</programlisting> |
||||
The functions implemented by <filename>adminpack</> can only be run by a |
||||
superuser. Here's a list of these functions: |
||||
|
||||
<programlisting> |
||||
int8 pg_catalog.pg_file_write(fname text, data text, append bool) |
||||
bool pg_catalog.pg_file_rename(oldname text, newname text, archivename text) |
||||
bool pg_catalog.pg_file_rename(oldname text, newname text) |
||||
bool pg_catalog.pg_file_unlink(fname text) |
||||
setof record pg_catalog.pg_logdir_ls() |
||||
|
||||
/* Renaming of existing backend functions for pgAdmin compatibility */ |
||||
int8 pg_catalog.pg_file_read(fname text, data text, append bool) |
||||
bigint pg_catalog.pg_file_length(text) |
||||
int4 pg_catalog.pg_logfile_rotate() |
||||
</programlisting> |
||||
</para> |
||||
|
||||
</sect2> |
||||
|
||||
</sect1> |
||||
|
@ -1,37 +1,56 @@ |
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/btree-gist.sgml,v 1.4 2007/12/06 04:12:09 tgl Exp $ --> |
||||
|
||||
<sect1 id="btree-gist"> |
||||
<title>btree_gist</title> |
||||
|
||||
|
||||
<indexterm zone="btree-gist"> |
||||
<primary>btree_gist</primary> |
||||
</indexterm> |
||||
|
||||
<para> |
||||
btree_gist is a B-Tree implementation using GiST that supports the int2, int4, |
||||
int8, float4, float8 timestamp with/without time zone, time |
||||
with/without time zone, date, interval, oid, money, macaddr, char, |
||||
varchar/text, bytea, numeric, bit, varbit and inet/cidr types. |
||||
<filename>btree_gist</> provides sample GiST operator classes that |
||||
implement B-Tree equivalent behavior for the data types |
||||
<type>int2</>, <type>int4</>, <type>int8</>, <type>float4</>, |
||||
<type>float8</>, <type>numeric</>, <type>timestamp with time zone</>, |
||||
<type>timestamp without time zone</>, <type>time with time zone</>, |
||||
<type>time without time zone</>, <type>date</>, <type>interval</>, |
||||
<type>oid</>, <type>money</>, <type>char</>, |
||||
<type>varchar</>, <type>text</>, <type>bytea</>, <type>bit</>, |
||||
<type>varbit</>, <type>macaddr</>, <type>inet</>, and <type>cidr</>. |
||||
</para> |
||||
|
||||
<para> |
||||
In general, these operator classes will not outperform the equivalent |
||||
standard btree index methods, and they lack one major feature of the |
||||
standard btree code: the ability to enforce uniqueness. However, |
||||
they are useful for GiST testing and as a base for developing other |
||||
GiST operator classes. |
||||
</para> |
||||
|
||||
<sect2> |
||||
<title>Example usage</title> |
||||
<programlisting> |
||||
CREATE TABLE test (a int4); |
||||
-- create index |
||||
CREATE INDEX testidx ON test USING gist (a); |
||||
-- query |
||||
SELECT * FROM test WHERE a < 10; |
||||
</programlisting> |
||||
|
||||
<programlisting> |
||||
CREATE TABLE test (a int4); |
||||
-- create index |
||||
CREATE INDEX testidx ON test USING gist (a); |
||||
-- query |
||||
SELECT * FROM test WHERE a < 10; |
||||
</programlisting> |
||||
|
||||
</sect2> |
||||
|
||||
|
||||
<sect2> |
||||
<title>Authors</title> |
||||
|
||||
<para> |
||||
All work was done by Teodor Sigaev (<email>teodor@stack.net</email>) , |
||||
Oleg Bartunov (<email>oleg@sai.msu.su</email>), Janko Richter |
||||
(<email>jankorichter@yahoo.de</email>). See |
||||
<ulink url="http://www.sai.msu.su/~megera/postgres/gist"></ulink> for additional |
||||
information. |
||||
Teodor Sigaev (<email>teodor@stack.net</email>) , |
||||
Oleg Bartunov (<email>oleg@sai.msu.su</email>), and |
||||
Janko Richter (<email>jankorichter@yahoo.de</email>). See |
||||
<ulink url="http://www.sai.msu.su/~megera/postgres/gist"></ulink> |
||||
for additional information. |
||||
</para> |
||||
|
||||
</sect2> |
||||
|
||||
</sect1> |
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,133 +1,191 @@ |
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/earthdistance.sgml,v 1.3 2007/12/06 04:12:10 tgl Exp $ --> |
||||
|
||||
<sect1 id="earthdistance"> |
||||
<title>earthdistance</title> |
||||
|
||||
|
||||
<indexterm zone="earthdistance"> |
||||
<primary>earthdistance</primary> |
||||
</indexterm> |
||||
|
||||
<para> |
||||
This module contains two different approaches to calculating |
||||
great circle distances on the surface of the Earth. The one described |
||||
first depends on the contrib/cube package (which MUST be installed before |
||||
earthdistance is installed). The second one is based on the point |
||||
datatype using latitude and longitude for the coordinates. The install |
||||
script makes the defined functions executable by anyone. |
||||
</para> |
||||
<para> |
||||
A spherical model of the Earth is used. |
||||
</para> |
||||
<para> |
||||
Data is stored in cubes that are points (both corners are the same) using 3 |
||||
coordinates representing the distance from the center of the Earth. |
||||
</para> |
||||
<para> |
||||
The radius of the Earth is obtained from the earth() function. It is |
||||
given in meters. But by changing this one function you can change it |
||||
to use some other units or to use a different value of the radius |
||||
that you feel is more appropiate. |
||||
</para> |
||||
<para> |
||||
This package also has applications to astronomical databases as well. |
||||
Astronomers will probably want to change earth() to return a radius of |
||||
180/pi() so that distances are in degrees. |
||||
</para> |
||||
<para> |
||||
Functions are provided to allow for input in latitude and longitude (in |
||||
degrees), to allow for output of latitude and longitude, to calculate |
||||
the great circle distance between two points and to easily specify a |
||||
bounding box usable for index searches. |
||||
</para> |
||||
<para> |
||||
The functions are all 'sql' functions. If you want to make these functions |
||||
executable by other people you will also have to make the referenced |
||||
cube functions executable. cube(text), cube(float8), cube(cube,float8), |
||||
cube_distance(cube,cube), cube_ll_coord(cube,int) and |
||||
cube_enlarge(cube,float8,int) are used indirectly by the earth distance |
||||
functions. is_point(cube) and cube_dim(cube) are used in constraints for data |
||||
in domain earth. cube_ur_coord(cube,int) is used in the regression tests and |
||||
might be useful for looking at bounding box coordinates in user applications. |
||||
</para> |
||||
<para> |
||||
A domain of type cube named earth is defined. |
||||
There are constraints on it defined to make sure the cube is a point, |
||||
that it does not have more than 3 dimensions and that it is very near |
||||
the surface of a sphere centered about the origin with the radius of |
||||
the Earth. |
||||
</para> |
||||
<para> |
||||
The following functions are provided: |
||||
The <filename>earthdistance</> module provides two different approaches to |
||||
calculating great circle distances on the surface of the Earth. The one |
||||
described first depends on the <filename>cube</> package (which |
||||
<emphasis>must</> be installed before <filename>earthdistance</> can be |
||||
installed). The second one is based on the built-in <type>point</> datatype, |
||||
using longitude and latitude for the coordinates. |
||||
</para> |
||||
|
||||
<table id="earthdistance-functions"> |
||||
<title>EarthDistance functions</title> |
||||
<tgroup cols="2"> |
||||
<tbody> |
||||
<row> |
||||
<entry><literal>earth()</literal></entry> |
||||
<entry>returns the radius of the Earth in meters.</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>sec_to_gc(float8)</literal></entry> |
||||
<entry>converts the normal straight line |
||||
(secant) distance between between two points on the surface of the Earth |
||||
to the great circle distance between them. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>gc_to_sec(float8)</literal></entry> |
||||
<entry>Converts the great circle distance |
||||
between two points on the surface of the Earth to the normal straight line |
||||
(secant) distance between them. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>ll_to_earth(float8, float8)</literal></entry> |
||||
<entry>Returns the location of a point on the surface of the Earth given |
||||
its latitude (argument 1) and longitude (argument 2) in degrees. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>latitude(earth)</literal></entry> |
||||
<entry>Returns the latitude in degrees of a point on the surface of the |
||||
Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>longitude(earth)</literal></entry> |
||||
<entry>Returns the longitude in degrees of a point on the surface of the |
||||
Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>earth_distance(earth, earth)</literal></entry> |
||||
<entry>Returns the great circle distance between two points on the |
||||
surface of the Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal>earth_box(earth, float8)</literal></entry> |
||||
<entry>Returns a box suitable for an indexed search using the cube @> |
||||
operator for points within a given great circle distance of a location. |
||||
Some points in this box are further than the specified great circle |
||||
distance from the location so a second check using earth_distance |
||||
should be made at the same time. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><literal><@></literal> operator</entry> |
||||
<entry>gives the distance in statute miles between |
||||
two points on the Earth's surface. Coordinates are in degrees. Points are |
||||
taken as (longitude, latitude) and not vice versa as longitude is closer |
||||
to the intuitive idea of x-axis and latitude to y-axis. |
||||
</entry> |
||||
</row> |
||||
</tbody> |
||||
</tgroup> |
||||
</table> |
||||
<para> |
||||
One advantage of using cube representation over a point using latitude and |
||||
longitude for coordinates, is that you don't have to worry about special |
||||
conditions at +/- 180 degrees of longitude or near the poles. |
||||
In this module, the Earth is assumed to be perfectly spherical. |
||||
(If that's too inaccurate for you, you might want to look at the |
||||
<application><ulink url="http://www.postgis.org/">PostGIS</ulink></> |
||||
project.) |
||||
</para> |
||||
</sect1> |
||||
|
||||
<sect2> |
||||
<title>Cube-based earth distances</title> |
||||
|
||||
<para> |
||||
Data is stored in cubes that are points (both corners are the same) using 3 |
||||
coordinates representing the x, y, and z distance from the center of the |
||||
Earth. A domain <type>earth</> over <type>cube</> is provided, which |
||||
includes constraint checks that the value meets these restrictions and |
||||
is reasonably close to the actual surface of the Earth. |
||||
</para> |
||||
|
||||
<para> |
||||
The radius of the Earth is obtained from the <function>earth()</> |
||||
function. It is given in meters. But by changing this one function you can |
||||
change the module to use some other units, or to use a different value of |
||||
the radius that you feel is more appropiate. |
||||
</para> |
||||
|
||||
<para> |
||||
This package has applications to astronomical databases as well. |
||||
Astronomers will probably want to change <function>earth()</> to return a |
||||
radius of <literal>180/pi()</> so that distances are in degrees. |
||||
</para> |
||||
|
||||
<para> |
||||
Functions are provided to support input in latitude and longitude (in |
||||
degrees), to support output of latitude and longitude, to calculate |
||||
the great circle distance between two points and to easily specify a |
||||
bounding box usable for index searches. |
||||
</para> |
||||
|
||||
<para> |
||||
The following functions are provided: |
||||
</para> |
||||
|
||||
<table id="earthdistance-cube-functions"> |
||||
<title>Cube-based earthdistance functions</title> |
||||
<tgroup cols="3"> |
||||
<thead> |
||||
<row> |
||||
<entry>Function</entry> |
||||
<entry>Returns</entry> |
||||
<entry>Description</entry> |
||||
</row> |
||||
</thead> |
||||
<tbody> |
||||
<row> |
||||
<entry><function>earth()</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Returns the assumed radius of the Earth.</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>sec_to_gc(float8)</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Converts the normal straight line |
||||
(secant) distance between between two points on the surface of the Earth |
||||
to the great circle distance between them. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>gc_to_sec(float8)</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Converts the great circle distance between two points on the |
||||
surface of the Earth to the normal straight line (secant) distance |
||||
between them. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>ll_to_earth(float8, float8)</function></entry> |
||||
<entry><type>earth</type></entry> |
||||
<entry>Returns the location of a point on the surface of the Earth given |
||||
its latitude (argument 1) and longitude (argument 2) in degrees. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>latitude(earth)</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Returns the latitude in degrees of a point on the surface of the |
||||
Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>longitude(earth)</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Returns the longitude in degrees of a point on the surface of the |
||||
Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>earth_distance(earth, earth)</function></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Returns the great circle distance between two points on the |
||||
surface of the Earth. |
||||
</entry> |
||||
</row> |
||||
<row> |
||||
<entry><function>earth_box(earth, float8)</function></entry> |
||||
<entry><type>cube</type></entry> |
||||
<entry>Returns a box suitable for an indexed search using the cube |
||||
<literal>@></> |
||||
operator for points within a given great circle distance of a location. |
||||
Some points in this box are further than the specified great circle |
||||
distance from the location, so a second check using |
||||
<function>earth_distance</> should be included in the query. |
||||
</entry> |
||||
</row> |
||||
</tbody> |
||||
</tgroup> |
||||
</table> |
||||
|
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>Point-based earth distances</title> |
||||
|
||||
<para> |
||||
The second part of the module relies on representing Earth locations as |
||||
values of type <type>point</>, in which the first component is taken to |
||||
represent longitude in degrees, and the second component is taken to |
||||
represent latitude in degrees. Points are taken as (longitude, latitude) |
||||
and not vice versa because longitude is closer to the intuitive idea of |
||||
x-axis and latitude to y-axis. |
||||
</para> |
||||
|
||||
<para> |
||||
A single operator is provided: |
||||
</para> |
||||
|
||||
<table id="earthdistance-point-operators"> |
||||
<title>Point-based earthdistance operators</title> |
||||
<tgroup cols="3"> |
||||
<thead> |
||||
<row> |
||||
<entry>Operator</entry> |
||||
<entry>Returns</entry> |
||||
<entry>Description</entry> |
||||
</row> |
||||
</thead> |
||||
<tbody> |
||||
<row> |
||||
<entry><type>point</> <literal><@></literal> <type>point</></entry> |
||||
<entry><type>float8</type></entry> |
||||
<entry>Gives the distance in statute miles between |
||||
two points on the Earth's surface. |
||||
</entry> |
||||
</row> |
||||
</tbody> |
||||
</tgroup> |
||||
</table> |
||||
|
||||
<para> |
||||
Note that unlike the <type>cube</>-based part of the module, units |
||||
are hardwired here: changing the <function>earth()</> function will |
||||
not affect the results of this operator. |
||||
</para> |
||||
|
||||
<para> |
||||
One disadvantage of the longitude/latitude representation is that |
||||
you need to be careful about the edge conditions near the poles |
||||
and near +/- 180 degrees of longitude. The <type>cube</>-based |
||||
representation avoids these discontinuities. |
||||
</para> |
||||
|
||||
</sect2> |
||||
|
||||
</sect1> |
||||
|
@ -1,118 +1,126 @@ |
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/lo.sgml,v 1.3 2007/12/06 04:12:10 tgl Exp $ --> |
||||
|
||||
<sect1 id="lo"> |
||||
<title>lo</title> |
||||
|
||||
|
||||
<indexterm zone="lo"> |
||||
<primary>lo</primary> |
||||
</indexterm> |
||||
|
||||
<para> |
||||
PostgreSQL type extension for managing Large Objects |
||||
The <filename>lo</> module provides support for managing Large Objects |
||||
(also called LOs or BLOBs). This includes a data type <type>lo</> |
||||
and a trigger <function>lo_manage</>. |
||||
</para> |
||||
|
||||
<sect2> |
||||
<title>Overview</title> |
||||
<title>Rationale</title> |
||||
|
||||
<para> |
||||
One of the problems with the JDBC driver (and this affects the ODBC driver |
||||
also), is that the specification assumes that references to BLOBS (Binary |
||||
Large OBjectS) are stored within a table, and if that entry is changed, the |
||||
also), is that the specification assumes that references to BLOBs (Binary |
||||
Large OBjects) are stored within a table, and if that entry is changed, the |
||||
associated BLOB is deleted from the database. |
||||
</para> |
||||
|
||||
<para> |
||||
As PostgreSQL stands, this doesn't occur. Large objects are treated as |
||||
objects in their own right; a table entry can reference a large object by |
||||
OID, but there can be multiple table entries referencing the same large |
||||
object OID, so the system doesn't delete the large object just because you |
||||
change or remove one such entry. |
||||
</para> |
||||
<para> |
||||
Now this is fine for new PostgreSQL-specific applications, but existing ones |
||||
using JDBC or ODBC won't delete the objects, resulting in orphaning - objects |
||||
that are not referenced by anything, and simply occupy disk space. |
||||
As <productname>PostgreSQL</> stands, this doesn't occur. Large objects |
||||
are treated as objects in their own right; a table entry can reference a |
||||
large object by OID, but there can be multiple table entries referencing |
||||
the same large object OID, so the system doesn't delete the large object |
||||
just because you change or remove one such entry. |
||||
</para> |
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>The Fix</title> |
||||
<para> |
||||
I've fixed this by creating a new data type 'lo', some support functions, and |
||||
a Trigger which handles the orphaning problem. The trigger essentially just |
||||
does a 'lo_unlink' whenever you delete or modify a value referencing a large |
||||
object. When you use this trigger, you are assuming that there is only one |
||||
database reference to any large object that is referenced in a |
||||
trigger-controlled column! |
||||
Now this is fine for <productname>PostgreSQL</>-specific applications, but |
||||
standard code using JDBC or ODBC won't delete the objects, resulting in |
||||
orphan objects — objects that are not referenced by anything, and |
||||
simply occupy disk space. |
||||
</para> |
||||
|
||||
<para> |
||||
The 'lo' type was created because we needed to differentiate between plain |
||||
OIDs and Large Objects. Currently the JDBC driver handles this dilemma easily, |
||||
but (after talking to Byron), the ODBC driver needed a unique type. They had |
||||
created an 'lo' type, but not the solution to orphaning. |
||||
The <filename>lo</> module allows fixing this by attaching a trigger |
||||
to tables that contain LO reference columns. The trigger essentially just |
||||
does a <function>lo_unlink</> whenever you delete or modify a value |
||||
referencing a large object. When you use this trigger, you are assuming |
||||
that there is only one database reference to any large object that is |
||||
referenced in a trigger-controlled column! |
||||
</para> |
||||
|
||||
<para> |
||||
You don't actually have to use the 'lo' type to use the trigger, but it may be |
||||
convenient to use it to keep track of which columns in your database represent |
||||
large objects that you are managing with the trigger. |
||||
The module also provides a data type <type>lo</>, which is really just |
||||
a domain of the <type>oid</> type. This is useful for differentiating |
||||
database columns that hold large object references from those that are |
||||
OIDs of other things. You don't have to use the <type>lo</> type to |
||||
use the trigger, but it may be convenient to use it to keep track of which |
||||
columns in your database represent large objects that you are managing with |
||||
the trigger. It is also rumored that the ODBC driver gets confused if you |
||||
don't use <type>lo</> for BLOB columns. |
||||
</para> |
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>How to Use</title> |
||||
<title>How to Use It</title> |
||||
|
||||
<para> |
||||
The easiest way is by an example: |
||||
Here's a simple example of usage: |
||||
</para> |
||||
|
||||
<programlisting> |
||||
CREATE TABLE image (title TEXT, raster lo); |
||||
|
||||
CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON image |
||||
FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster); |
||||
</programlisting> |
||||
|
||||
<para> |
||||
Create a trigger for each column that contains a lo type, and give the column |
||||
name as the trigger procedure argument. You can have more than one trigger on |
||||
a table if you need multiple lo columns in the same table, but don't forget to |
||||
give a different name to each trigger. |
||||
For each column that will contain unique references to large objects, |
||||
create a <literal>BEFORE UPDATE OR DELETE</> trigger, and give the column |
||||
name as the sole trigger argument. If you need multiple <type>lo</> |
||||
columns in the same table, create a separate trigger for each one, |
||||
remembering to give a different name to each trigger on the same table. |
||||
</para> |
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>Issues</title> |
||||
<title>Limitations</title> |
||||
|
||||
<itemizedlist> |
||||
<listitem> |
||||
<para> |
||||
Dropping a table will still orphan any objects it contains, as the trigger |
||||
is not executed. |
||||
is not executed. You can avoid this by preceding the <command>DROP |
||||
TABLE</> with <command>DELETE FROM <replaceable>table</></command>. |
||||
</para> |
||||
|
||||
<para> |
||||
Avoid this by preceding the 'drop table' with 'delete from {table}'. |
||||
<command>TRUNCATE</> has the same hazard. |
||||
</para> |
||||
|
||||
<para> |
||||
If you already have, or suspect you have, orphaned large objects, see |
||||
the contrib/vacuumlo module to help you clean them up. It's a good idea |
||||
to run contrib/vacuumlo occasionally as a back-stop to the lo_manage |
||||
trigger. |
||||
If you already have, or suspect you have, orphaned large objects, see the |
||||
<filename>contrib/vacuumlo</> module (<xref linkend="vacuumlo">) to help |
||||
you clean them up. It's a good idea to run <application>vacuumlo</> |
||||
occasionally as a back-stop to the <function>lo_manage</> trigger. |
||||
</para> |
||||
</listitem> |
||||
|
||||
<listitem> |
||||
<para> |
||||
Some frontends may create their own tables, and will not create the |
||||
associated trigger(s). Also, users may not remember (or know) to create |
||||
associated trigger(s). Also, users may not remember (or know) to create |
||||
the triggers. |
||||
</para> |
||||
</listitem> |
||||
</itemizedlist> |
||||
|
||||
<para> |
||||
As the ODBC driver needs a permanent lo type (& JDBC could be optimised to |
||||
use it if it's Oid is fixed), and as the above issues can only be fixed by |
||||
some internal changes, I feel it should become a permanent built-in type. |
||||
</para> |
||||
</sect2> |
||||
|
||||
<sect2> |
||||
<title>Author</title> |
||||
|
||||
<para> |
||||
Peter Mount <email>peter@retep.org.uk</email> June 13 1998 |
||||
Peter Mount <email>peter@retep.org.uk</email> |
||||
</para> |
||||
</sect2> |
||||
</sect1> |
||||
|
||||
</sect1> |
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue