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

数据库系统

开发平台:

Unix_Linux

  1. $Header: /usr/local/cvsroot/pgsql/src/backend/catalog/README,v 1.1.1.1 1996/07/09 06:21:15 scrappy Exp $
  2. This directory contains .c files that manipulate the system catalogs
  3. as well as .h files that define the structure of the system catalogs.
  4. When the compile-time scripts (such as Gen_fmgrtab.sh and genbki.sh)
  5. execute, they grep the DATA statements out of the .h files and munge
  6. these in order to generate the .bki files.  The .bki files are then
  7. used as input to initdb (which is just a wrapper around postgres
  8. running single-user in bootstrapping mode) in order to generate the
  9. initial (template) system catalog relation files.
  10. -----------------------------------------------------------------
  11. People who are going to hose around with the .h files should be aware
  12. of the following facts:
  13. - It is very important that the DATA statements be properly formatted
  14. (e.g., no broken lines, proper use of white-space and _null_).  The
  15. scripts are line-oriented and break easily.  In addition, the only
  16. documentation on the proper format for them is the code in the
  17. bootstrap/ directory.  Just be careful when adding new DATA
  18. statements.
  19. - Some catalogs require that OIDs be preallocated to tuples because
  20. certain catalogs contain circular references.  For example, pg_type
  21. contains pointers into pg_proc (pg_type.typinput), and pg_proc
  22. contains back-pointers into pg_type (pg_proc.proargtypes).  In these
  23. cases, the references may be explicitly set by use of the "OID ="
  24. clause of the .bki insert statement.  If no such pointers are required
  25. to a given tuple, then the OID may be set to the wildcard value 0
  26. (i.e., the system generates a random OID in the usual way).
  27. If you need to find a valid OID for a set of tuples that refer to each
  28. other, use the unused_oids script.  It generates inclusive ranges of
  29. *unused* OIDs (i.e., the line "45-900" means OIDs 45 through 900 have
  30. not been allocated yet).  However, you should not rely 100% on this
  31. script, since it only looks at the .h files in the catalog/ directory.
  32. Do a pg_grepsrc (recursive grep) of the source tree to insure that
  33. there aren't any hidden crocks (i.e., explicit use of a numeric OID)
  34. anywhere in the code.
  35. -----------------------------------------------------------------
  36. When munging the .c files, you should be aware of certain conventions:
  37. - The system catalog cache code (and most catalog-munging code in
  38. general) assumes that the fixed-length portion of all system catalog
  39. tuples are in fact present.  That is, only the variable-length
  40. portions of a catalog tuple are assumed to be permitted to be
  41. non-NULL.  For example, if you set pg_type.typdelim to be NULL, a
  42. piece of code will likely perform "typetup->typdelim" (or, worse,
  43. "typetyp->typelem", which follows typdelim).  This will result in
  44. random errors or even segmentation violations.  Hence, do NOT insert
  45. catalog tuples that contain NULL attributes except in their
  46. variable-length portions!
  47. - Modification of the catalogs must be performed with the proper
  48. updating of catalog indexes!  That is, several catalogs have indexes
  49. on them; when you munge them using the executor, the executor will
  50. take care of doing the index updates, but if you make direct access
  51. method calls to insert new or modified tuples into a heap, you must
  52. also make the calls to insert the tuple into ALL of its indexes!  If
  53. not, the new tuple will generally be "invisible" to the system because
  54. most of the accesses to the catalogs in question will be through the
  55. associated indexes.