В общем случае вы не можете (по крайней мере, на PostgreSQL), если не выполните оператор CREATE TABLE. Например, допустим, вы начинаете с этой таблицы.
CREATE TABLE wibble (
a INTEGER,
b INTEGER,
c VARCHAR(35),
d DATE
);
Схема будет записана следующим образом.
CREATE TABLE wibble
(
a integer,
b integer,
c character varying(35),
d date
)
Затем вы отбрасываете столбец «а» и добавляете столбец «а».
ALTER TABLE wibble DROP COLUMN a;
ALTER TABLE wibble ADD COLUMN a INTEGER;
Теперь схема будет выглядеть следующим образом.
CREATE TABLE wibble
(
b integer,
c character varying(35),
d date,
a integer
)
Столбец "a" был первым столбцом; теперь это последнее. Это не имеет значения в реляционной теории или в SQL, потому что порядок столбцов не имеет значения. Однако для системы контроля версий это очень важно.
Удаление столбца может также отбрасывать ограничения, триггеры и индексы.
PostgreSQL также переписывает ваши операторы SQL DDL в каноническую форму. Например, вы можете написать что-то вроде этого.
CREATE TABLE wibble (
a INTEGER PRIMARY KEY,
...
Но PostgreSQL будет хранить что-то вроде этого.
CREATE TABLE wibble
(
a integer NOT NULL,
. . .
CONSTRAINT wibble_pkey PRIMARY KEY (a)
)