Add smallserial pseudotype.

This is just like serial and bigserial, except it generates an int2
column rather than int4 or int8.

Mike Pultz, reviewed by Brar Piening and Josh Kupershmidt
This commit is contained in:
Robert Haas 2011-06-21 22:52:52 -04:00
parent 7095003cbe
commit 61307dccc5
4 changed files with 40 additions and 5 deletions

View File

@ -198,6 +198,12 @@
<entry>signed two-byte integer</entry>
</row>
<row>
<entry><type>smallserial</type></entry>
<entry><type>serial2</type></entry>
<entry>autoincrementing two-byte integer</entry>
</row>
<row>
<entry><type>serial</type></entry>
<entry><type>serial4</type></entry>
@ -368,6 +374,13 @@
<entry>15 decimal digits precision</entry>
</row>
<row>
<entry><type>smallserial</type></entry>
<entry>2 bytes</entry>
<entry>small autoincrementing integer</entry>
<entry>1 to 32767</entry>
</row>
<row>
<entry><type>serial</></entry>
<entry>4 bytes</entry>
@ -742,6 +755,10 @@ NUMERIC
<sect2 id="datatype-serial">
<title>Serial Types</title>
<indexterm zone="datatype-serial">
<primary>smallserial</primary>
</indexterm>
<indexterm zone="datatype-serial">
<primary>serial</primary>
</indexterm>
@ -750,6 +767,10 @@ NUMERIC
<primary>bigserial</primary>
</indexterm>
<indexterm zone="datatype-serial">
<primary>serial2</primary>
</indexterm>
<indexterm zone="datatype-serial">
<primary>serial4</primary>
</indexterm>
@ -769,8 +790,8 @@ NUMERIC
</indexterm>
<para>
The data types <type>serial</type> and <type>bigserial</type>
are not true types, but merely
The data types <type>smallserial</type>, <type>serial</type> and
<type>bigserial</type> are not true types, but merely
a notational convenience for creating unique identifier columns
(similar to the <literal>AUTO_INCREMENT</literal> property
supported by some other databases). In the current
@ -828,7 +849,9 @@ ALTER SEQUENCE <replaceable class="parameter">tablename</replaceable>_<replaceab
the same way, except that they create a <type>bigint</type>
column. <type>bigserial</type> should be used if you anticipate
the use of more than 2<superscript>31</> identifiers over the
lifetime of the table.
lifetime of the table. The type names <type>smallserial</type> and
<type>serial2</type> also work the same way, execpt that they
create a <type>smallint</type> column.
</para>
<para>

View File

@ -844,6 +844,11 @@ do
<entry><type>double</type></entry>
</row>
<row>
<entry><type>smallserial</type></entry>
<entry><type>short</type></entry>
</row>
<row>
<entry><type>serial</type></entry>
<entry><type>int</type></entry>

View File

@ -13366,7 +13366,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
<row>
<entry><literal><function>pg_get_serial_sequence(<parameter>table_name</parameter>, <parameter>column_name</parameter>)</function></literal></entry>
<entry><type>text</type></entry>
<entry>get name of the sequence that a <type>serial</type> or <type>bigserial</type> column
<entry>get name of the sequence that a <type>serial</type>, <type>smallserial</type> or <type>bigserial</type> column
uses</entry>
</row>
<row>

View File

@ -307,7 +307,14 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
{
char *typname = strVal(linitial(column->typeName->names));
if (strcmp(typname, "serial") == 0 ||
if (strcmp(typname, "smallserial") == 0 ||
strcmp(typname, "serial2") == 0)
{
is_serial = true;
column->typeName->names = NIL;
column->typeName->typeOid = INT2OID;
}
else if (strcmp(typname, "serial") == 0 ||
strcmp(typname, "serial4") == 0)
{
is_serial = true;