|
|
|
@ -55,7 +55,7 @@ complex_in(char *str) |
|
|
|
double x, y; |
|
|
|
double x, y; |
|
|
|
Complex *result; |
|
|
|
Complex *result; |
|
|
|
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) { |
|
|
|
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) { |
|
|
|
elog(NOTICE, "complex_in: error in parsing |
|
|
|
elog(ERROR, "complex_in: error in parsing %s", str); |
|
|
|
return NULL; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
result = (Complex *)palloc(sizeof(Complex)); |
|
|
|
result = (Complex *)palloc(sizeof(Complex)); |
|
|
|
@ -138,22 +138,16 @@ CREATE TYPE complex ( |
|
|
|
<title>Large Objects</title> |
|
|
|
<title>Large Objects</title> |
|
|
|
|
|
|
|
|
|
|
|
<para> |
|
|
|
<para> |
|
|
|
The types discussed to this point are all "small" |
|
|
|
If the values of your datatype might exceed a few hundred bytes in |
|
|
|
objects -- that is, they are smaller than 8KB in size. |
|
|
|
size (in internal form), you should be careful to mark them TOASTable. |
|
|
|
<note> |
|
|
|
To do this, the internal representation must follow the standard |
|
|
|
<para> |
|
|
|
layout for variable-length data: the first four bytes must be an int32 |
|
|
|
1024 longwords == 8192 bytes. In fact, the type must be considerably smaller than 8192 bytes, |
|
|
|
containing the total length in bytes of the datum (including itself). |
|
|
|
since the <productname>Postgres</productname> tuple |
|
|
|
Then, all your functions that accept values of the type must be careful |
|
|
|
and page overhead must also fit into this 8KB limitation. |
|
|
|
to call pg_detoast_datum() on the supplied values --- after checking |
|
|
|
The actual value that fits depends on the machine architecture. |
|
|
|
that the value is not NULL, if your function is not strict. Finally, |
|
|
|
</para> |
|
|
|
select the appropriate storage option when giving the CREATE TYPE |
|
|
|
</note> |
|
|
|
command. |
|
|
|
If you require a larger type for something like a document |
|
|
|
|
|
|
|
retrieval system or for storing bitmaps, you will |
|
|
|
|
|
|
|
need to use the <productname>Postgres</productname> large object |
|
|
|
|
|
|
|
interface, or will need to recompile the |
|
|
|
|
|
|
|
<productname>Postgres</productname> backend to use internal |
|
|
|
|
|
|
|
storage blocks greater than 8kbytes.. |
|
|
|
|
|
|
|
</para> |
|
|
|
</para> |
|
|
|
</sect2> |
|
|
|
</sect2> |
|
|
|
</sect1> |
|
|
|
</sect1> |
|
|
|
|