create_type.l
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. ." This is -*-nroff-*-
  2. ." XXX standard disclaimer belongs here....
  3. ." $Header: /usr/local/cvsroot/pgsql/src/man/Attic/create_type.l,v 1.6 1998/06/24 13:21:24 momjian Exp $
  4. .TH "CREATE TYPE" SQL 11/05/95 PostgreSQL PostgreSQL
  5. .SH NAME
  6. create type - define a new base data type 
  7. .SH SYNOPSIS
  8. .nf
  9. fBcreate typefP typename fB(fRfBinternallengthfR = (number | fBvariablefR),
  10. [ fBexternallengthfR = (number | fBvariablefR)fB,fR ]
  11. fBinputfR = input_function,
  12. fBoutputfR = output_function
  13. [fB,fR fBelementfR = typename]
  14. [fB,fR fBdelimiterfR = <character>]
  15. [fB,fR fBdefaultfR = "string" ]
  16. [fB,fR fBsendfR = send_function ]
  17. [fB,fR fBreceivefR = receive_function ]
  18. [fB,fR fBpassedbyvaluefR]fB)fR
  19. .fi
  20. ." fBcreate typefP typename as sql_commands
  21. .SH DESCRIPTION
  22. .BR "Create type"
  23. allows the user to register a new user data type with Postgres for use in
  24. the current data base.  The user who defines a type becomes its owner.
  25. .IR Typename
  26. is the name of the new type and must be unique within the types
  27. defined for this database.
  28. .PP
  29. .BR "Create type"
  30. requires the registration of two functions (using
  31. .IR create_function(l))
  32. before defining the type.  The representation of a new base type is
  33. determined by 
  34. .IR input_function ,
  35. which converts the type's external representation to an internal
  36. representation usable by the operators and functions defined for the
  37. type.  Naturally,
  38. .IR "output_function"
  39. performs the reverse transformation.  Both the input and output
  40. functions must be declared to take one or two arguments of type
  41. *(lqopaque*(rq.
  42. .PP
  43. New base data types can be fixed length, in which case
  44. .BR "internallength"
  45. is a positive integer, or variable length, in which case Postgres assumes
  46. that the new type has the same format as the Postgres-supplied data type,
  47. *(lqtext*(rq.  To indicate that a type is variable-length, set
  48. .BR "internallength"
  49. to
  50. .IR "variable" .
  51. The external representation is similarly specified using the
  52. .IR "externallength"
  53. keyword.
  54. .PP
  55. To indicate that a type is an array and to indicate that a type has
  56. array elements, indicate the type of the array element using the
  57. .BR "element"
  58. keyword.  For example, to define an array of 4 byte integers
  59. (*(lqint4*(rq), specify
  60. .nf
  61. element = int4
  62. .fi
  63. .PP
  64. To indicate the delimiter to be used on arrays of this type, 
  65. .BR "delimiter"
  66. can be set to a specific character.  The default delimiter is the
  67. comma (*(lq,*(rq) character.
  68. .PP
  69. A
  70. .BR "default"
  71. value is optionally available in case a user wants some specific bit
  72. pattern to mean *(lqdata not present.*(rq
  73. .PP
  74. The optional functions
  75. .IR "send_function"
  76. and
  77. .IR "receive_function"
  78. are used when the application program requesting Postgres services
  79. resides on a different machine.  In this case, the machine on which
  80. Postgres runs may use a different format for the data type than used on
  81. the remote machine.  In this case it is appropriate to convert data
  82. items to a standard form when
  83. .BR send ing
  84. from the server to the client and converting from the standard format
  85. to the machine specific format when the server
  86. .BR receive s
  87. the data from the client.  If these functions are not specified, then
  88. it is assumed that the internal format of the type is acceptable on
  89. all relevant machine architectures.  For example, single characters do
  90. not have to be converted if passed from a Sun-4 to a DECstation, but
  91. many other types do.
  92. .PP
  93. The optional
  94. .BR "passedbyvalue"
  95. flag indicates that operators and functions which use this data type
  96. should be passed an argument by value rather than by reference.  Note
  97. that only types whose internal representation is at most four bytes
  98. may be passed by value.
  99. .PP
  100. For new base types, a user can define operators, functions and
  101. aggregates using the appropriate facilities described in this section.
  102. .SH "ARRAY TYPES"
  103. Two generalized built-in functions,
  104. .BR array_in
  105. and
  106. .BR array_out,
  107. exist for quick creation of variable-length array types.  These
  108. functions operate on arrays of any existing Postgres type.
  109. .SH "LARGE OBJECT TYPES"
  110. A *(lqregular*(rq Postgres type can only be 8192 bytes in length.  If
  111. you need a larger type you must create a Large Object type.  The
  112. interface for these types is discussed at length in Section 7, the
  113. large object interface.  The length of all large object types
  114. is always
  115. .IR variable,
  116. meaning the
  117. .BR internallength
  118. for large objects is always -1.
  119. .SH EXAMPLES
  120. .nf
  121. --
  122. --This command creates the box data type and then uses the
  123. --type in a class definition
  124. --
  125. create type box (internallength = 8,
  126.   input = my_procedure_1, output = my_procedure_2)
  127. create table MYBOXES (id = int4, description = box)
  128. .fi
  129. .nf
  130. --
  131. --This command creates a variable length array type with
  132. --integer elements.
  133. --
  134. create type int4array
  135.    (input = array_in, output = array_out,
  136.     internallength = variable, element = int4)
  137. create table MYARRAYS (id = int4, numbers = int4array)
  138. .fi
  139. .nf
  140. --
  141. --This command creates a large object type and uses it in
  142. --a class definition.
  143. --
  144. create type bigobj
  145.    (input = lo_filein, output = lo_fileout,
  146.     internallength = variable)
  147. create table BIG_OBJS (id = int4, obj = bigobj)
  148. .fi
  149. .SH "RESTRICTIONS"
  150. Type names cannot begin with the underscore character (*(lq_*(rq)
  151. and can only be 15 characters long.  This is because Postgres silently 
  152. creates an array type for each base type with a name consisting of the 
  153. base type's name prepended with an underscore.
  154. .SH "SEE ALSO"
  155. create_function(l),
  156. create_operator(l),
  157. drop_type(l),
  158. large_objects(3).