| PostgreSQL Reference Manual - Volume 1 - SQL Language Reference by The PostgreSQL Global Development Group Paperback (6"x9"), 716 pages ISBN 0954612027 RRP £32.00 ($49.95) Sales of this book support the PostgreSQL project! Get a printed copy>>> |
6.11.5 Composite Type Input and Output Syntax
The external text representation of a composite value consists of items that
are interpreted according to the I/O conversion rules for the individual
field types, plus decoration that indicates the composite structure.
The decoration consists of parentheses (( and ))
around the whole value, plus commas (,) between adjacent
items. Whitespace outside the parentheses is ignored, but within the
parentheses it is considered part of the field value, and may or may not be
significant depending on the input conversion rules for the field data type.
For example, in
'( 42)'
the whitespace will be ignored if the field type is integer, but not if it is text.
As shown previously, when writing a composite value you may write double quotes around any individual field value. You must do so if the field value would otherwise confuse the composite-value parser. In particular, fields containing parentheses, commas, double quotes, or backslashes must be double-quoted. To put a double quote or backslash in a quoted composite field value, precede it with a backslash. (Also, a pair of double quotes within a double-quoted field value is taken to represent a double quote character, analogously to the rules for single quotes in SQL literal strings.) Alternatively, you can use backslash-escaping to protect all data characters that would otherwise be taken as composite syntax.
A completely empty field value (no characters at all between the commas
or parentheses) represents a NULL. To write a value that is an empty
string rather than NULL, write "".
The composite output routine will put double quotes around field values if they are empty strings or contain parentheses, commas, double quotes, backslashes, or white space. (Doing so for white space is not essential, but aids legibility.) Double quotes and backslashes embedded in field values will be doubled.
Note: Remember that what you write in an SQL command will first be interpreted as a string literal, and then as a composite. This doubles the number of backslashes you need (assuming escape string syntax is used). For example, to insert a
textfield containing a double quote and a backslash in a composite value, you'd need to writeINSERT ... VALUES (E'("\\"\\\\")');The string-literal processor removes one level of backslashes, so that what arrives at the composite-value parser looks like
("\"\\"). In turn, the string fed to thetextdata type's input routine becomes"\. (If we were working with a data type whose input routine also treated backslashes specially,byteafor example, we might need as many as eight backslashes in the command to get one backslash into the stored composite field.) Dollar quoting (see section 2.1.2.2 Dollar-Quoted String Constants) may be used to avoid the need to double backslashes.
Tip: The
ROWconstructor syntax is usually easier to work with than the composite-literal syntax when writing composite values in SQL commands. InROW, individual field values are written the same way they would be written when not members of a composite.
| ISBN 0954612027 | PostgreSQL Reference Manual - Volume 1 - SQL Language Reference | See the print edition |