mirror of https://github.com/postgres/postgres
This adds the CREATE TABLE name OF type command, per SQL standard.REL9_0_ALPHA4_BRANCH
parent
1f98cccb94
commit
e7b3349a8a
@ -0,0 +1,85 @@ |
||||
CREATE TABLE ttable1 OF nothing; |
||||
ERROR: type "nothing" does not exist |
||||
CREATE TYPE person_type AS (id int, name text); |
||||
CREATE TABLE persons OF person_type; |
||||
SELECT * FROM persons; |
||||
id | name |
||||
----+------ |
||||
(0 rows) |
||||
|
||||
\d persons |
||||
Table "public.persons" |
||||
Column | Type | Modifiers |
||||
--------+---------+----------- |
||||
id | integer | |
||||
name | text | |
||||
Typed table of type: person_type |
||||
|
||||
CREATE FUNCTION get_all_persons() RETURNS SETOF person_type |
||||
LANGUAGE SQL |
||||
AS $$ |
||||
SELECT * FROM persons; |
||||
$$; |
||||
SELECT * FROM get_all_persons(); |
||||
id | name |
||||
----+------ |
||||
(0 rows) |
||||
|
||||
ALTER TABLE persons ADD COLUMN comment text; |
||||
ERROR: cannot add column to typed table |
||||
ALTER TABLE persons DROP COLUMN name; |
||||
ERROR: cannot drop column from typed table |
||||
ALTER TABLE persons RENAME COLUMN id TO num; |
||||
ERROR: cannot rename column of typed table |
||||
CREATE TABLE personsx OF person_type (myname WITH OPTIONS NOT NULL); -- error |
||||
ERROR: column "myname" does not exist |
||||
CREATE TABLE persons2 OF person_type ( |
||||
id WITH OPTIONS PRIMARY KEY, |
||||
UNIQUE (name) |
||||
); |
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "persons2_pkey" for table "persons2" |
||||
NOTICE: CREATE TABLE / UNIQUE will create implicit index "persons2_name_key" for table "persons2" |
||||
\d persons2 |
||||
Table "public.persons2" |
||||
Column | Type | Modifiers |
||||
--------+---------+----------- |
||||
id | integer | not null |
||||
name | text | |
||||
Indexes: |
||||
"persons2_pkey" PRIMARY KEY, btree (id) |
||||
"persons2_name_key" UNIQUE, btree (name) |
||||
Typed table of type: person_type |
||||
|
||||
CREATE TABLE persons3 OF person_type ( |
||||
PRIMARY KEY (id), |
||||
name WITH OPTIONS DEFAULT '' |
||||
); |
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "persons3_pkey" for table "persons3" |
||||
\d persons3 |
||||
Table "public.persons3" |
||||
Column | Type | Modifiers |
||||
--------+---------+------------------ |
||||
id | integer | not null |
||||
name | text | default ''::text |
||||
Indexes: |
||||
"persons3_pkey" PRIMARY KEY, btree (id) |
||||
Typed table of type: person_type |
||||
|
||||
CREATE TABLE persons4 OF person_type ( |
||||
name WITH OPTIONS NOT NULL, |
||||
name WITH OPTIONS DEFAULT '' -- error, specified more than once |
||||
); |
||||
ERROR: column "name" specified more than once |
||||
DROP TYPE person_type RESTRICT; |
||||
ERROR: cannot drop type person_type because other objects depend on it |
||||
DETAIL: table persons depends on type person_type |
||||
function get_all_persons() depends on type person_type |
||||
table persons2 depends on type person_type |
||||
table persons3 depends on type person_type |
||||
HINT: Use DROP ... CASCADE to drop the dependent objects too. |
||||
DROP TYPE person_type CASCADE; |
||||
NOTICE: drop cascades to 4 other objects |
||||
DETAIL: drop cascades to table persons |
||||
drop cascades to function get_all_persons() |
||||
drop cascades to table persons2 |
||||
drop cascades to table persons3 |
@ -0,0 +1,42 @@ |
||||
CREATE TABLE ttable1 OF nothing; |
||||
|
||||
CREATE TYPE person_type AS (id int, name text); |
||||
CREATE TABLE persons OF person_type; |
||||
SELECT * FROM persons; |
||||
\d persons |
||||
|
||||
CREATE FUNCTION get_all_persons() RETURNS SETOF person_type |
||||
LANGUAGE SQL |
||||
AS $$ |
||||
SELECT * FROM persons; |
||||
$$; |
||||
|
||||
SELECT * FROM get_all_persons(); |
||||
|
||||
ALTER TABLE persons ADD COLUMN comment text; |
||||
ALTER TABLE persons DROP COLUMN name; |
||||
ALTER TABLE persons RENAME COLUMN id TO num; |
||||
|
||||
CREATE TABLE personsx OF person_type (myname WITH OPTIONS NOT NULL); -- error |
||||
|
||||
CREATE TABLE persons2 OF person_type ( |
||||
id WITH OPTIONS PRIMARY KEY, |
||||
UNIQUE (name) |
||||
); |
||||
|
||||
\d persons2 |
||||
|
||||
CREATE TABLE persons3 OF person_type ( |
||||
PRIMARY KEY (id), |
||||
name WITH OPTIONS DEFAULT '' |
||||
); |
||||
|
||||
\d persons3 |
||||
|
||||
CREATE TABLE persons4 OF person_type ( |
||||
name WITH OPTIONS NOT NULL, |
||||
name WITH OPTIONS DEFAULT '' -- error, specified more than once |
||||
); |
||||
|
||||
DROP TYPE person_type RESTRICT; |
||||
DROP TYPE person_type CASCADE; |
Loading…
Reference in new issue