mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Allow ALTER TABLE name {OF type | NOT OF}.
This syntax allows a standalone table to be made into a typed table, or a typed table to be made standalone. This is possibly a mildly useful feature in its own right, but the real motivation for this change is that we need it to make pg_upgrade work with typed tables. This doesn't actually fix that problem, but it's necessary infrastructure. Noah Misch
This commit is contained in:
@ -1369,3 +1369,33 @@ ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa CASCADE;
|
||||
|
||||
CREATE TYPE test_type_empty AS ();
|
||||
DROP TYPE test_type_empty;
|
||||
|
||||
--
|
||||
-- typed tables: OF / NOT OF
|
||||
--
|
||||
|
||||
CREATE TYPE tt_t0 AS (z inet, x int, y numeric(8,2));
|
||||
ALTER TYPE tt_t0 DROP ATTRIBUTE z;
|
||||
CREATE TABLE tt0 (x int NOT NULL, y numeric(8,2)); -- OK
|
||||
CREATE TABLE tt1 (x int, y bigint); -- wrong base type
|
||||
CREATE TABLE tt2 (x int, y numeric(9,2)); -- wrong typmod
|
||||
CREATE TABLE tt3 (y numeric(8,2), x int); -- wrong column order
|
||||
CREATE TABLE tt4 (x int); -- too few columns
|
||||
CREATE TABLE tt5 (x int, y numeric(8,2), z int); -- too few columns
|
||||
CREATE TABLE tt6 () INHERITS (tt0); -- can't have a parent
|
||||
CREATE TABLE tt7 (x int, q text, y numeric(8,2)) WITH OIDS;
|
||||
ALTER TABLE tt7 DROP q; -- OK
|
||||
|
||||
ALTER TABLE tt0 OF tt_t0;
|
||||
ALTER TABLE tt1 OF tt_t0;
|
||||
ALTER TABLE tt2 OF tt_t0;
|
||||
ALTER TABLE tt3 OF tt_t0;
|
||||
ALTER TABLE tt4 OF tt_t0;
|
||||
ALTER TABLE tt5 OF tt_t0;
|
||||
ALTER TABLE tt6 OF tt_t0;
|
||||
ALTER TABLE tt7 OF tt_t0;
|
||||
|
||||
CREATE TYPE tt_t1 AS (x int, y numeric(8,2));
|
||||
ALTER TABLE tt7 OF tt_t1; -- reassign an already-typed table
|
||||
ALTER TABLE tt7 NOT OF;
|
||||
\d tt7
|
||||
|
Reference in New Issue
Block a user