README
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. PostgreSQL type extension for managing Large Objects
  2. ----------------------------------------------------
  3. $Id: README,v 1.1 1998/06/16 07:07:11 momjian Exp $
  4. Overview
  5. One of the problems with the JDBC driver (and this affects the ODBC driver
  6. also), is that the specification assumes that references to BLOBS (Binary
  7. Large OBjectS) are stored within a table, and if that entry is changed, the
  8. associated BLOB is deleted from the database.
  9. As PostgreSQL stands, this doesn't occur. It allocates an OID for each object,
  10. and it is up to the application to store, and ultimately delete the objects.
  11. Now this is fine for new postgresql specific applications, but existing ones
  12. using JDBC or ODBC wont delete the objects, arising to orphaning - objects
  13. that are not referenced by anything, and simply occupy disk space.
  14. The Fix
  15. I've fixed this by creating a new data type 'lo', some support functions, and
  16. a Trigger which handles the orphaning problem.
  17. The 'lo' type was created because we needed to differenciate between normal
  18. Oid's and Large Objects. Currently the JDBC driver handles this dilema easily,
  19. but (after talking to Byron), the ODBC driver needed a unique type. They had created an 'lo' type, but not the solution to orphaning.
  20. Install
  21. Ok, first build the shared library, and install. Typing 'make install' in the
  22. contrib/lo directory should do it.
  23. Then, as the postgres super user, run the lo.sql script. This will install the
  24. type, and define the support functions.
  25. How to Use
  26. The easiest way is by an example:
  27. > create table image (title text,raster lo);
  28. > create trigger t_image before update or delete on image for each row execute procedure lo_manage(raster);
  29. Here, a trigger is created for each column that contains a lo type.
  30. Issues
  31. * dropping a table will still orphan any objects it contains, as the trigger
  32.   is not actioned.
  33.   For now, precede the 'drop table' with 'delete from {table}'. However, this
  34.   could be fixed by having 'drop table' perform an additional
  35.       'select lo_unlink({colname}::oid) from {tablename}'
  36.   for each column, before actually dropping the table.
  37. * Some frontends may create their own tables, and will not create the
  38.   associated trigger(s). Also, users may not remember (or know) to create
  39.   the triggers.
  40.   This can be solved, but would involve changes to the parser.
  41. As the ODBC driver needs a permanent lo type (& JDBC could be optimised to
  42. use it if it's Oid is fixed), and as the above issues can only be fixed by
  43. some internal changes, I feel it should become a permanent built-in type.
  44. I'm releasing this into contrib, just to get it out, and tested.
  45. Peter Mount <peter@retep.org.uk> June 13 1998