aboutsummaryrefslogtreecommitdiff
path: root/doc/man/create_type.l
diff options
context:
space:
mode:
Diffstat (limited to 'doc/man/create_type.l')
-rw-r--r--doc/man/create_type.l161
1 files changed, 161 insertions, 0 deletions
diff --git a/doc/man/create_type.l b/doc/man/create_type.l
new file mode 100644
index 00000000000..42f1e677654
--- /dev/null
+++ b/doc/man/create_type.l
@@ -0,0 +1,161 @@
+.\" This is -*-nroff-*-
+.\" XXX standard disclaimer belongs here....
+.\" $Header: /cvsroot/pgsql/doc/man/Attic/create_type.l,v 1.1.1.1 1996/08/18 22:14:22 scrappy Exp $
+.TH "CREATE TYPE" SQL 11/05/95 Postgres95 Postgres95
+.SH NAME
+create type \(em define a new base data type
+.SH SYNOPSIS
+.nf
+\fBcreate type\fP typename \fB(\fR\fBinternallength\fR = (number | \fBvariable\fR),
+ [ \fBexternallength\fR = (number | \fBvariable\fR)\fB,\fR ]
+ \fBinput\fR = input_function,
+ \fBoutput\fR = output_function
+ [\fB,\fR \fBelement\fR = typename]
+ [\fB,\fR \fBdelimiter\fR = <character>]
+ [\fB,\fR \fBdefault\fR = "string" ]
+ [\fB,\fR \fBsend\fR = send_function ]
+ [\fB,\fR \fBreceive\fR = receive_function ]
+ [\fB,\fR \fBpassedbyvalue\fR]\fB)\fR
+.fi
+.\" \fBcreate type\fP typename as sql_commands
+.SH DESCRIPTION
+.BR "Create type"
+allows the user to register a new user data type with Postgres for use in
+the current data base. The user who defines a type becomes its owner.
+.IR Typename
+is the name of the new type and must be unique within the types
+defined for this database.
+.PP
+.BR "Create type"
+requires the registration of two functions (using
+.IR "create function" (l))
+before defining the type. The representation of a new base type is
+determined by
+.IR input_function ,
+which converts the type's external representation to an internal
+representation usable by the operators and functions defined for the
+type. Naturally,
+.IR "output_function"
+performs the reverse transformation. Both the input and output
+functions must be declared to take one or two arguments of type
+\*(lqopaque\*(rq.
+.PP
+New base data types can be fixed length, in which case
+.BR "internallength"
+is a positive integer, or variable length, in which case Postgres assumes
+that the new type has the same format as the Postgres-supplied data type,
+\*(lqtext\*(rq. To indicate that a type is variable-length, set
+.BR "internallength"
+to
+.IR "variable" .
+The external representation is similarly specified using the
+.IR "externallength"
+keyword.
+.PP
+To indicate that a type is an array and to indicate that a type has
+array elements, indicate the type of the array element using the
+.BR "element"
+keyword. For example, to define an array of 4 byte integers
+(\*(lqint4\*(rq), specify
+.nf
+element = int4
+.fi
+.PP
+To indicate the delimiter to be used on arrays of this type,
+.BR "delimiter"
+can be set to a specific character. The default delimiter is the
+comma (\*(lq,\*(rq) character.
+.PP
+A
+.BR "default"
+value is optionally available in case a user wants some specific bit
+pattern to mean \*(lqdata not present.\*(rq
+.PP
+The optional functions
+.IR "send_function"
+and
+.IR "receive_function"
+are used when the application program requesting Postgres services
+resides on a different machine. In this case, the machine on which
+Postgres runs may use a different format for the data type than used on
+the remote machine. In this case it is appropriate to convert data
+items to a standard form when
+.BR send ing
+from the server to the client and converting from the standard format
+to the machine specific format when the server
+.BR receive s
+the data from the client. If these functions are not specified, then
+it is assumed that the internal format of the type is acceptable on
+all relevant machine architectures. For example, single characters do
+not have to be converted if passed from a Sun-4 to a DECstation, but
+many other types do.
+.PP
+The optional
+.BR "passedbyvalue"
+flag indicates that operators and functions which use this data type
+should be passed an argument by value rather than by reference. Note
+that only types whose internal representation is at most four bytes
+may be passed by value.
+.PP
+For new base types, a user can define operators, functions and
+aggregates using the appropriate facilities described in this section.
+.SH "ARRAY TYPES"
+Two generalized built-in functions,
+.BR array_in
+and
+.BR array_out,
+exist for quick creation of variable-length array types. These
+functions operate on arrays of any existing Postgres type.
+.SH "LARGE OBJECT TYPES"
+A \*(lqregular\*(rq Postgres type can only be 8192 bytes in length. If
+you need a larger type you must create a Large Object type. The
+interface for these types is discussed at length in Section 7, the
+large object interface. The length of all large object types
+is always
+.IR variable,
+meaning the
+.BR internallength
+for large objects is always -1.
+.SH EXAMPLES
+.nf
+--
+--This command creates the box data type and then uses the
+--type in a class definition
+--
+create type box (internallength = 8,
+ input = my_procedure_1, output = my_procedure_2)
+
+create table MYBOXES (id = int4, description = box)
+.fi
+.nf
+--
+--This command creates a variable length array type with
+--integer elements.
+--
+create type int4array
+ (input = array_in, output = array_out,
+ internallength = variable, element = int4)
+
+create table MYARRAYS (id = int4, numbers = int4array)
+.fi
+.nf
+--
+--This command creates a large object type and uses it in
+--a class definition.
+--
+create type bigobj
+ (input = lo_filein, output = lo_fileout,
+ internallength = variable)
+
+create table BIG_OBJS (id = int4, obj = bigobj)
+.fi
+.SH "RESTRICTIONS"
+Type names cannot begin with the underscore character (\*(lq_\*(rq)
+and can only be 15 characters long. This is because Postgres silently
+creates an array type for each base type with a name consisting of the
+base type's name prepended with an underscore.
+.SH "SEE ALSO"
+create function(l),
+create operator(l),
+drop type(l),
+introduction(large objects).