summaryrefslogtreecommitdiff
path: root/contrib/lo
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2000-06-19 14:02:16 +0000
committerBruce Momjian <bruce@momjian.us>2000-06-19 14:02:16 +0000
commitbad9ce7099c2d4154dbd787f34a3a3a3a405e4e1 (patch)
tree065921cc0aaff8e2a8ede19d40850c7fbd0b72ed /contrib/lo
parent6de7d4fe91b1f037eb9ad612a22e972037426100 (diff)
downloadpostgresql-bad9ce7099c2d4154dbd787f34a3a3a3a405e4e1.tar.gz
Add missing /contrib files
Diffstat (limited to 'contrib/lo')
-rw-r--r--contrib/lo/README.lo69
1 files changed, 69 insertions, 0 deletions
diff --git a/contrib/lo/README.lo b/contrib/lo/README.lo
new file mode 100644
index 0000000000..aa06adf084
--- /dev/null
+++ b/contrib/lo/README.lo
@@ -0,0 +1,69 @@
+PostgreSQL type extension for managing Large Objects
+----------------------------------------------------
+
+Overview
+
+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
+associated BLOB is deleted from the database.
+
+As PostgreSQL stands, this doesn't occur. It allocates an OID for each object,
+and it is up to the application to store, and ultimately delete the objects.
+
+Now this is fine for new postgresql specific applications, but existing ones
+using JDBC or ODBC wont delete the objects, arising to orphaning - objects
+that are not referenced by anything, and simply occupy disk space.
+
+The Fix
+
+I've fixed this by creating a new data type 'lo', some support functions, and
+a Trigger which handles the orphaning problem.
+
+The 'lo' type was created because we needed to differenciate between normal
+Oid's and Large Objects. Currently the JDBC driver handles this dilema 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.
+
+Install
+
+Ok, first build the shared library, and install. Typing 'make install' in the
+contrib/lo directory should do it.
+
+Then, as the postgres super user, run the lo.sql script. This will install the
+type, and define the support functions.
+
+How to Use
+
+The easiest way is by an example:
+
+> create table image (title text,raster lo);
+> create trigger t_image before update or delete on image for each row execute procedure lo_manage(raster);
+
+Here, a trigger is created for each column that contains a lo type.
+
+Issues
+
+* dropping a table will still orphan any objects it contains, as the trigger
+ is not actioned.
+
+ For now, precede the 'drop table' with 'delete from {table}'. However, this
+ could be fixed by having 'drop table' perform an additional
+
+ 'select lo_unlink({colname}::oid) from {tablename}'
+
+ for each column, before actually dropping the table.
+
+* Some frontends may create their own tables, and will not create the
+ associated trigger(s). Also, users may not remember (or know) to create
+ the triggers.
+
+ This can be solved, but would involve changes to the parser.
+
+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.
+
+I'm releasing this into contrib, just to get it out, and tested.
+
+Peter Mount <peter@retep.org.uk> June 13 1998
+