Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit04604fd

Browse files
committed
Fill in section on table modification.
1 parent497baca commit04604fd

File tree

1 file changed

+158
-38
lines changed

1 file changed

+158
-38
lines changed

‎doc/src/sgml/ddl.sgml

Lines changed: 158 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ddl.sgml,v 1.2 2002/08/28 20:17:44 momjian Exp $ -->
1+
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ddl.sgml,v 1.3 2002/09/05 21:32:23 petere Exp $ -->
22

33
<chapter id="ddl">
44
<title>Data Definition</title>
@@ -151,7 +151,7 @@ DROP TABLE products;
151151
columns will be filled with their respective default values. A
152152
data manipulation command can also request explicitly that a column
153153
be set to its default value, without knowing what this value is.
154-
(Details about data manipulation commands are inthe next chapter.)
154+
(Details about data manipulation commands are in<xref linkend="dml">.)
155155
</para>
156156

157157
<para>
@@ -263,7 +263,7 @@ CREATE TABLE products (
263263
The first two constraints should look familiar. The third one
264264
uses a new syntax. It is not attached to a particular column,
265265
instead it appears as a separate item in the comma-separated
266-
column list.In general, columndefinitions and constraint
266+
column list.Columndefinitions and these constraint
267267
definitions can be listed in mixed order.
268268
</para>
269269

@@ -299,8 +299,10 @@ CREATE TABLE products (
299299

300300
<para>
301301
It should be noted that a check constraint is satisfied if the
302-
check expression evaluates to true or the null value. To ensure
303-
that a column does not contain null values, the not-null
302+
check expression evaluates to true or the null value. Since most
303+
expressions will evaluate to the null value if one operand is null
304+
they will not prevent null values in the constrained columns. To
305+
ensure that a column does not contain null values, the not-null
304306
constraint described in the next section should be used.
305307
</para>
306308
</sect2>
@@ -322,12 +324,13 @@ CREATE TABLE products (
322324

323325
<para>
324326
A not-null constraint is always written as a column constraint. A
325-
not-null constraint is equivalent to creating a check constraint
326-
<literal>CHECK (<replaceable>column_name</replaceable> IS NOT
327-
NULL)</literal>, but in <productname>PostgreSQL</productname>
328-
creating an explicit not-null constraint is more efficient. The
329-
drawback is that you cannot give explicit names to not-null
330-
constraints created that way.
327+
not-null constraint is functionally equivalent to creating a check
328+
constraint <literal>CHECK (<replaceable>column_name</replaceable>
329+
IS NOT NULL)</literal>, but in
330+
<productname>PostgreSQL</productname> creating an explicit
331+
not-null constraint is more efficient. The drawback is that you
332+
cannot give explicit names to not-null constraints created that
333+
way.
331334
</para>
332335

333336
<para>
@@ -564,8 +567,8 @@ CREATE TABLE t1 (
564567
<emphasis>FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)</emphasis>
565568
);
566569
</programlisting>
567-
Of course, the number and type of constrained columns needs to
568-
match the number and type of referenced columns.
570+
Of course, the number and type oftheconstrained columns needs to
571+
match the number and type ofthereferenced columns.
569572
</para>
570573

571574
<para>
@@ -847,13 +850,14 @@ SET SQL_Inheritance TO OFF;
847850
<title>Modifying Tables</title>
848851

849852
<para>
850-
When you create a table and you realize that you made a mistake,
851-
then you can drop the table and create it again. But this is not a
852-
convenient option if the table is already filled with data, or if
853-
the table is referenced by other database objects (for instance a
854-
foreign key constraint). Therefore
855-
<productname>PostgreSQL</productname> provides a family of commands
856-
to make modifications on existing tables.
853+
When you create a table and you realize that you made a mistake, or
854+
the requirements of the application changed, then you can drop the
855+
table and create it again. But this is not a convenient option if
856+
the table is already filled with data, or if the table is
857+
referenced by other database objects (for instance a foreign key
858+
constraint). Therefore <productname>PostgreSQL</productname>
859+
provides a family of commands to make modifications on existing
860+
tables.
857861
</para>
858862

859863
<para>
@@ -862,6 +866,9 @@ SET SQL_Inheritance TO OFF;
862866
<listitem>
863867
<para>Add columns,</para>
864868
</listitem>
869+
<listitem>
870+
<para>Remove a column,</para>
871+
</listitem>
865872
<listitem>
866873
<para>Add constraints,</para>
867874
</listitem>
@@ -879,22 +886,135 @@ SET SQL_Inheritance TO OFF;
879886
</listitem>
880887
</itemizedlist>
881888

882-
In the current implementation you cannot
883-
<itemizedlist spacing="compact">
884-
<listitem>
885-
<para>Remove a column,</para>
886-
</listitem>
887-
<listitem>
888-
<para>Change the data type of a column.</para>
889-
</listitem>
890-
</itemizedlist>
891-
These may be possible in a future release.
889+
All these actions are performed using the <literal>ALTER
890+
TABLE</literal> command.
892891
</para>
893892

894-
<comment>
895-
OK, now explain how to do this. There's currently so much activity
896-
on <literal>ALTER TABLE</literal> that I'm holding off a bit.
897-
</comment>
893+
<sect2>
894+
<title>Adding a Column</title>
895+
896+
<para>
897+
To add a column, use this command:
898+
<programlisting>
899+
ALTER TABLE products ADD COLUMN description text;
900+
</programlisting>
901+
The new column will initially be filled with null values in the
902+
existing rows of the table.
903+
</para>
904+
905+
<para>
906+
You can also define a constraint on the column at the same time,
907+
using the usual syntax:
908+
<programlisting>
909+
ALTER TABLE products ADD COLUMN description text CHECK (description &lt;&gt; '');
910+
</programlisting>
911+
A new column cannot have a not-null constraint since the column
912+
initially has to contain null values. But you can add a not-null
913+
constraint later. Also, you cannot define a default value on a
914+
new column. According to the SQL standard, this would have to
915+
fill the new columns in the existing rows with the default value,
916+
which is not implemented yet. But you can adjust the column
917+
default later on.
918+
</para>
919+
</sect2>
920+
921+
<sect2>
922+
<title>Removing a Column</title>
923+
924+
<para>
925+
To remove a column, use this command:
926+
<programlisting>
927+
ALTER TABLE products DROP COLUMN description;
928+
</programlisting>
929+
</para>
930+
</sect2>
931+
932+
<sect2>
933+
<title>Adding a Constraint</title>
934+
935+
<para>
936+
To add a constraint, the table constraint syntax is used. For example:
937+
<programlisting>
938+
ALTER TABLE products ADD CHECK (name &lt;&gt; '');
939+
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
940+
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
941+
</programlisting>
942+
To add a not-null constraint, which cannot be written as a table
943+
constraint, use this syntax:
944+
<programlisting>
945+
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
946+
</programlisting>
947+
</para>
948+
949+
<para>
950+
The constraint will be checked immediately, so the table data must
951+
satisfy the constraint before it can be added.
952+
</para>
953+
</sect2>
954+
955+
<sect2>
956+
<title>Removing a Constraint</title>
957+
958+
<para>
959+
To remove a constraint you need to know its name. If you gave it
960+
a name then that's easy. Otherwise the system assigned a
961+
generated name, which you need to find out. The
962+
<application>psql</application> command <literal>\d
963+
<replaceable>tablename</replaceable></literal> can be helpful
964+
here; other interfaces might also provide a way to inspect table
965+
details. Then the command is:
966+
<programlisting>
967+
ALTER TABLE products DROP CONSTRAINT some_name;
968+
</programlisting>
969+
This works the same for all constraint types except not-null
970+
constraints. To drop a not null constraint use
971+
<programlisting>
972+
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
973+
</programlisting>
974+
(Recall that not-null constraints do not have names.)
975+
</para>
976+
</sect2>
977+
978+
<sect2>
979+
<title>Changing the Default</title>
980+
981+
<para>
982+
To set a new default for a column, use a command like this:
983+
<programlisting>
984+
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
985+
</programlisting>
986+
To remove any default value, use
987+
<programlisting>
988+
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
989+
</programlisting>
990+
This is equivalent to setting the default to null, at least in
991+
PostgreSQL. As a consequence, it is not an error to drop a
992+
default where one hadn't been defined, because the default is
993+
implicitly the null value.
994+
</para>
995+
</sect2>
996+
997+
<sect2>
998+
<title>Renaming a Column</title>
999+
1000+
<para>
1001+
To rename a column:
1002+
<programlisting>
1003+
ALTER TABLE products RENAME COLUMN product_no TO product_number;
1004+
</programlisting>
1005+
</para>
1006+
</sect2>
1007+
1008+
<sect2>
1009+
<title>Renaming a Table</title>
1010+
1011+
<para>
1012+
To rename a table:
1013+
<programlisting>
1014+
ALTER TABLE products RENAME TO items;
1015+
</programlisting>
1016+
</para>
1017+
</sect2>
8981018
</sect1>
8991019

9001020
<sect1 id="ddl-schemas">
@@ -990,10 +1110,10 @@ DROP TABLE products CASCADE;
9901110

9911111
<note>
9921112
<para>
993-
ForeignKey constraint dependencies andSERIAL dependencies from
994-
<productname>PostgreSQL</productname> versions prior to 7.3 are
995-
<emphasis>not</emphasis> maintained or created during the upgrade
996-
process.However, allother dependency typesare created successfully.
1113+
Foreignkey constraint dependencies andserial column dependencies
1114+
from<productname>PostgreSQL</productname> versions prior to 7.3
1115+
are<emphasis>not</emphasis> maintained or created during the
1116+
upgradeprocess.Allother dependency typessurvive the upgrade.
9971117
</para>
9981118
</note>
9991119
</sect1>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp