mirror of https://github.com/postgres/postgres
parent
609f71b760
commit
b976b8af80
@ -1,87 +0,0 @@ |
||||
|
||||
|
||||
-- Test Comment / Drop |
||||
create domain domaindroptest int4; |
||||
comment on domain domaindroptest is 'About to drop this..'; |
||||
|
||||
select * from pg_type where typname = 'domaindroptest'; |
||||
|
||||
drop domain domaindroptest restrict; |
||||
|
||||
select * from pg_type where typname = 'domaindroptest'; |
||||
|
||||
-- TEST Domains. |
||||
|
||||
create domain domainvarchar varchar(5); |
||||
create domain domainnumeric numeric(8,2); |
||||
create domain domainint4 int4; |
||||
create domain domaintext text; |
||||
|
||||
|
||||
-- Test tables using domains |
||||
create table basictest |
||||
( testint4 domainint4 |
||||
, testtext domaintext |
||||
, testvarchar domainvarchar |
||||
, testnumeric domainnumeric |
||||
); |
||||
|
||||
INSERT INTO basictest values ('88', 'haha', 'short', '123.12'); -- Good |
||||
INSERT INTO basictest values ('88', 'haha', 'short text', '123.12'); -- Bad varchar |
||||
INSERT INTO basictest values ('88', 'haha', 'short', '123.1212'); -- Truncate numeric |
||||
select * from basictest; |
||||
|
||||
|
||||
-- Array Test |
||||
create domain domainint4arr int4[1]; |
||||
create domain domaintextarr text[2][3]; |
||||
|
||||
create table arrtest |
||||
( testint4arr domainint4arr |
||||
, testtextarr domaintextarr |
||||
); |
||||
INSERT INTO arrtest values ('{2,2}', '{{"a","b"}{"c","d"}}'); |
||||
INSERT INTO arrtest values ('{{2,2}{2,2}}', '{{"a","b"}}'); |
||||
INSERT INTO arrtest values ('{2,2}', '{{"a","b"}{"c","d"}{"e"}}'); |
||||
INSERT INTO arrtest values ('{2,2}', '{{"a"}{"c"}}'); |
||||
INSERT INTO arrtest values (NULL, '{{"a","b"}{"c","d","e"}}'); |
||||
|
||||
|
||||
create domain dnotnull varchar(15) NOT NULL; |
||||
create domain dnull varchar(15) NULL; |
||||
|
||||
create table nulltest |
||||
( col1 dnotnull |
||||
, col2 dnotnull NULL -- NOT NULL in the domain cannot be overridden |
||||
, col3 dnull NOT NULL |
||||
, col4 dnull |
||||
); |
||||
INSERT INTO nulltest DEFAULT VALUES; |
||||
INSERT INTO nulltest values ('a', 'b', 'c', 'd'); -- Good |
||||
INSERT INTO nulltest values (NULL, 'b', 'c', 'd'); |
||||
INSERT INTO nulltest values ('a', NULL, 'c', 'd'); |
||||
INSERT INTO nulltest values ('a', 'b', NULL, 'd'); |
||||
INSERT INTO nulltest values ('a', 'b', 'c', NULL); -- Good |
||||
select * from nulltest; |
||||
|
||||
|
||||
create domain ddef1 int4 DEFAULT 3; |
||||
create domain ddef2 numeric(8,6) DEFAULT '1234.123456789'; |
||||
-- Type mixing, function returns int8 |
||||
create domain ddef3 text DEFAULT 5; |
||||
create sequence ddef4_seq; |
||||
create domain ddef4 int4 DEFAULT nextval(cast('ddef4_seq' as text)); |
||||
|
||||
create table defaulttest |
||||
( col1 ddef1 |
||||
, col2 ddef2 |
||||
, col3 ddef3 |
||||
, col4 ddef4 |
||||
, col5 ddef1 NOT NULL DEFAULT NULL |
||||
, col6 ddef2 DEFAULT '88.1' |
||||
, col7 ddef4 DEFAULT 8000 |
||||
); |
||||
insert into defaulttest default values; |
||||
insert into defaulttest default values; |
||||
insert into defaulttest default values; |
||||
select * from defaulttest; |
@ -1,231 +0,0 @@ |
||||
<!-- |
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_domain.sgml,v 1.1 2002/03/06 20:34:44 momjian Exp $ |
||||
PostgreSQL documentation |
||||
--> |
||||
|
||||
<refentry id="SQL-CREATEDOMAIN"> |
||||
<refmeta> |
||||
<refentrytitle id="sql-createdomian-title"> |
||||
CREATE DOMAIN |
||||
</refentrytitle> |
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo> |
||||
</refmeta> |
||||
<refnamediv> |
||||
<refname> |
||||
CREATE DOMAIN |
||||
</refname> |
||||
<refpurpose> |
||||
define a new domain |
||||
</refpurpose> |
||||
</refnamediv> |
||||
<refsynopsisdiv> |
||||
<refsynopsisdivinfo> |
||||
<date>2002-02-24</date> |
||||
</refsynopsisdivinfo> |
||||
<synopsis> |
||||
CREATE DOMAIN <replaceable class="parameter">domainname</replaceable> <replaceable class="parameter">data_type</replaceable> [ DEFAULT <replaceable>default_expr</> ] [ <replaceable class="PARAMETER">column_constraint</replaceable> [, ... ] ] |
||||
[ CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable> ] |
||||
{ NOT NULL | NULL <!-- | UNIQUE | PRIMARY KEY | |
||||
CHECK (<replaceable class="PARAMETER">expression</replaceable>) | |
||||
REFERENCES <replaceable class="PARAMETER">reftable</replaceable> [ ( <replaceable class="PARAMETER">refcolumn</replaceable> ) ] [ MATCH FULL | MATCH PARTIAL ] |
||||
[ ON DELETE <replaceable class="parameter">action</replaceable> ] [ ON UPDATE <replaceable class="parameter">action</replaceable> ] --> } |
||||
<!-- [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] --> |
||||
</synopsis> |
||||
|
||||
<refsect2 id="R2-SQL-CREATEDOMAIN-1"> |
||||
<refsect2info> |
||||
<date>2002-02-24</date> |
||||
</refsect2info> |
||||
<title> |
||||
Parameters |
||||
</title> |
||||
<para> |
||||
|
||||
<variablelist> |
||||
<varlistentry> |
||||
<term><replaceable class="parameter">domainname</replaceable></term> |
||||
<listitem> |
||||
<para> |
||||
The name of a domain to be created. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
<varlistentry> |
||||
<term><replaceable class="PARAMETER">data_type</replaceable></term> |
||||
<listitem> |
||||
<para> |
||||
The data type of the domain. This may include array specifiers. |
||||
Refer to the <citetitle>User's Guide</citetitle> for further |
||||
information about data types and arrays. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
<varlistentry> |
||||
<term><literal>DEFAULT |
||||
<replaceable>default_expr</replaceable></literal></term> |
||||
<listitem> |
||||
<para> |
||||
The <literal>DEFAULT</> clause assigns a default data value for |
||||
the column whose column definition it appears within. The value |
||||
is any variable-free expression (subselects and cross-references |
||||
to other columns in the current table are not allowed). The |
||||
data type of the default expression must match the data type of the |
||||
domain. |
||||
</para> |
||||
|
||||
<para> |
||||
The default expression will be used in any insert operation that |
||||
does not specify a value for the domain. If there is no default |
||||
for a domain, then the default is NULL. |
||||
</para> |
||||
|
||||
<note> |
||||
<para> |
||||
The default of a column will be tested before that of the domain. |
||||
</para> |
||||
</note> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
<varlistentry> |
||||
<term><literal>CONSTRAINT <replaceable class="PARAMETER">constraint_name</replaceable></literal></term> |
||||
<listitem> |
||||
<para> |
||||
An optional name for a domain. If not specified, |
||||
the system generates a name. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
<varlistentry> |
||||
<term><literal>NOT NULL</></term> |
||||
<listitem> |
||||
<para> |
||||
The column is not allowed to contain NULL values. This is |
||||
equivalent to the column constraint <literal>CHECK (<replaceable |
||||
class="PARAMETER">column</replaceable> NOT NULL)</literal>. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
<varlistentry> |
||||
<term><literal>NULL</></term> |
||||
<listitem> |
||||
<para> |
||||
The column is allowed to contain NULL values. This is the default. |
||||
</para> |
||||
|
||||
<para> |
||||
This clause is only available for compatibility with |
||||
non-standard SQL databases. Its use is discouraged in new |
||||
applications. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
||||
</variablelist> |
||||
</para> |
||||
</refsect2> |
||||
|
||||
<refsect2 id="R2-SQL-CREATEDOMAIN-2"> |
||||
<refsect2info> |
||||
<date>2002-02-24</date> |
||||
</refsect2info> |
||||
<title> |
||||
Outputs |
||||
</title> |
||||
<para> |
||||
|
||||
<variablelist> |
||||
<varlistentry> |
||||
<term><computeroutput> |
||||
CREATE DOMAIN |
||||
</computeroutput></term> |
||||
<listitem> |
||||
<para> |
||||
Message returned if the domain is successfully created. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
</variablelist> |
||||
</para> |
||||
</refsect2> |
||||
</refsynopsisdiv> |
||||
|
||||
<refsect1 id="R1-SQL-CREATEDOMAIN-1"> |
||||
<refsect1info> |
||||
<date>2002-02-24</date> |
||||
</refsect1info> |
||||
<title> |
||||
Description |
||||
</title> |
||||
|
||||
<para> |
||||
<command>CREATE DOMAIN</command> allows the user to register a new user data |
||||
domain with PostgreSQL for use in the current data base. The |
||||
user who defines a domain becomes its owner. |
||||
<replaceable class="parameter">domainname</replaceable> is |
||||
the name of the new type and must be unique within the |
||||
types and domains defined for this database. |
||||
</para> |
||||
|
||||
<para> |
||||
Domains are useful for abstracting common fields between tables into |
||||
a single location for maintenance. An email address column may be used |
||||
in several tables, all with the same properties. Define a domain and |
||||
use that rather than setting up each tables constraints individually. |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
<title>Examples</title> |
||||
<para> |
||||
This example creates the <type>country_code</type> data type and then uses the |
||||
type in a table definition: |
||||
<programlisting> |
||||
CREATE DOMAIN country_code char(2) NOT NULL; |
||||
CREATE TABLE countrylist (id INT4, country country_code); |
||||
</programlisting> |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-CREATEDOMAIN-compatibility"> |
||||
<title>Compatibility</title> |
||||
|
||||
<para> |
||||
This <command>CREATE DOMAIN</command> command is a |
||||
<productname>PostgreSQL</productname> extension. CHECK and FOREIGN KEY |
||||
constraints are currently unsupported. |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-CREATEDOMAIN-see-also"> |
||||
<title>See Also</title> |
||||
|
||||
<simplelist type="inline"> |
||||
<member><xref linkend="sql-dropdomain"></member> |
||||
<member><citetitle>PostgreSQL Programmer's Guide</citetitle></member> |
||||
</simplelist> |
||||
</refsect1> |
||||
|
||||
</refentry> |
||||
|
||||
|
||||
<!-- Keep this comment at the end of the file |
||||
Local variables: |
||||
mode: sgml |
||||
sgml-omittag:nil |
||||
sgml-shorttag:t |
||||
sgml-minimize-attributes:nil |
||||
sgml-always-quote-attributes:t |
||||
sgml-indent-step:1 |
||||
sgml-indent-data:t |
||||
sgml-parent-document:nil |
||||
sgml-default-dtd-file:"../reference.ced" |
||||
sgml-exposed-tags:nil |
||||
sgml-local-catalogs:"/usr/lib/sgml/catalog" |
||||
sgml-local-ecat-files:nil |
||||
End: |
||||
--> |
@ -1,167 +0,0 @@ |
||||
<!-- |
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_domain.sgml,v 1.1 2002/03/06 20:34:44 momjian Exp $ |
||||
PostgreSQL documentation |
||||
--> |
||||
|
||||
<refentry id="SQL-DROPDOMAIN"> |
||||
<refmeta> |
||||
<refentrytitle id="SQL-DROPDOMAIN-TITLE"> |
||||
DROP DOMAIN |
||||
</refentrytitle> |
||||
<refmiscinfo>SQL - Language Statements</refmiscinfo> |
||||
</refmeta> |
||||
<refnamediv> |
||||
<refname> |
||||
DROP DOMAIN |
||||
</refname> |
||||
<refpurpose> |
||||
remove a user-defined domain |
||||
</refpurpose> |
||||
</refnamediv> |
||||
<refsynopsisdiv> |
||||
<refsynopsisdivinfo> |
||||
<date>1999-07-20</date> |
||||
</refsynopsisdivinfo> |
||||
<synopsis> |
||||
DROP DOMAIN <replaceable class="PARAMETER">domainname</replaceable> [, ...] |
||||
</synopsis> |
||||
|
||||
<refsect2 id="R2-SQL-DROPDOMAIN-1"> |
||||
<refsect2info> |
||||
<date>2002-02-24</date> |
||||
</refsect2info> |
||||
<title> |
||||
Inputs |
||||
</title> |
||||
<para> |
||||
<variablelist> |
||||
<varlistentry> |
||||
<term><replaceable class="PARAMETER">domainname</replaceable></term> |
||||
<listitem> |
||||
<para> |
||||
The name of an existing domain. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
</variablelist> |
||||
</para> |
||||
</refsect2> |
||||
|
||||
<refsect2 id="R2-SQL-DROPDOMAIN-2"> |
||||
<refsect2info> |
||||
<date>2002-02-24</date> |
||||
</refsect2info> |
||||
<title> |
||||
Outputs |
||||
</title> |
||||
<para> |
||||
<variablelist> |
||||
<varlistentry> |
||||
<term><computeroutput> |
||||
DROP |
||||
</computeroutput></term> |
||||
<listitem> |
||||
<para> |
||||
The message returned if the command is successful. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
<varlistentry> |
||||
<term><computeroutput> |
||||
ERROR: RemoveDomain: type '<replaceable class="parameter">domainname</replaceable>' does not exist |
||||
</computeroutput></term> |
||||
<listitem> |
||||
<para> |
||||
This message occurs if the specified domain (or type) is not found. |
||||
</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
</variablelist> |
||||
</para> |
||||
</refsect2> |
||||
</refsynopsisdiv> |
||||
|
||||
<refsect1 id="R1-SQL-DROPDOMAIN-1"> |
||||
<refsect1info> |
||||
<date>2002-02-24</date> |
||||
</refsect1info> |
||||
<title> |
||||
Description |
||||
</title> |
||||
<para> |
||||
<command>DROP DOMAIN</command> will remove a user domain from the |
||||
system catalogs. |
||||
</para> |
||||
<para> |
||||
Only the owner of a domain can remove it. |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-DROPDOMAIN-notes"> |
||||
<title>Notes</title> |
||||
|
||||
<itemizedlist> |
||||
<listitem> |
||||
<para> |
||||
It is the user's responsibility to remove any operators, |
||||
functions, aggregates, access methods, and tables that |
||||
use a deleted domain. |
||||
</para> |
||||
</listitem> |
||||
</itemizedlist> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-DROPDOMAIN-examples"> |
||||
<title>Examples</title> |
||||
<para> |
||||
To remove the <type>box</type> domain: |
||||
|
||||
<programlisting> |
||||
DROP DOMAIN box RESTRICT; |
||||
</programlisting> |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-DROPDOMAIN-compatibility"> |
||||
<title>Compatibility</title> |
||||
|
||||
<para> |
||||
A <command>DROP DOMAIN</command> statement exists in SQL99. As with |
||||
most other <quote>drop</quote> commands, <command>DROP |
||||
DOMAIN</command> in SQL99 requires a <quote>drop behavior</quote> |
||||
clause to select between dropping all dependent objects or refusing |
||||
to drop if dependent objects exist: |
||||
<synopsis> |
||||
DROP DOMAIN <replaceable>name</replaceable> { CASCADE | RESTRICT } |
||||
</synopsis> |
||||
<productname>PostgreSQL</productname> enforces the existance of |
||||
RESTRICT or CASCADE but ignores their enforcement against the |
||||
system tables. |
||||
</para> |
||||
</refsect1> |
||||
|
||||
<refsect1 id="SQL-DROPDOMAIN-see-also"> |
||||
<title>See Also</title> |
||||
|
||||
<simplelist type="inline"> |
||||
<member><xref linkend="sql-createdomain"></member> |
||||
</simplelist> |
||||
</refsect1> |
||||
</refentry> |
||||
|
||||
<!-- Keep this comment at the end of the file |
||||
Local variables: |
||||
mode: sgml |
||||
sgml-omittag:nil |
||||
sgml-shorttag:t |
||||
sgml-minimize-attributes:nil |
||||
sgml-always-quote-attributes:t |
||||
sgml-indent-step:1 |
||||
sgml-indent-data:t |
||||
sgml-parent-document:nil |
||||
sgml-default-dtd-file:"../reference.ced" |
||||
sgml-exposed-tags:nil |
||||
sgml-local-catalogs:"/usr/lib/sgml/catalog" |
||||
sgml-local-ecat-files:nil |
||||
End: |
||||
--> |
Loading…
Reference in new issue