postgres.git / summary / log / commit / refs
commit 61307dccc5f2f352d7dfed5c13abf3f0e26ec85d
Author: Robert Haas <rhaas@postgresql.org>
Date: Wed Jun 22 02:52:52 2011 +0000
First released in: 9.2.0
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
doc/src/sgml/datatype.sgml | 29 ++++++++++++++++++++++++++---
doc/src/sgml/ecpg.sgml | 5 +++++
doc/src/sgml/func.sgml | 2 +-
src/backend/parser/parse_utilcmd.c | 9 ++++++++-
4 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index ab8eb2d30bb..0b4f978d985 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -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>
diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml
index def250c156c..847012293be 100644
--- a/doc/src/sgml/ecpg.sgml
+++ b/doc/src/sgml/ecpg.sgml
@@ -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>
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 8f223d68913..628fbef0017 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -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>
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index 622efe592d4..8744654f34a 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -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;
[parent: 7095003cbef6]