ALTER TABLE table [ * ]
ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
RENAME TO newtable
ALTER TABLE table
ADD table constraint definition
如果"*"跟在一個表名後面,表示該命令要對該表和所有繼承級別低於該表的表進行操作﹔預設時,該屬性(更改)不會增加到任何子表或修改任何子表的相關名稱。當增加或修改一個上級表(譯注:繼承級別高的表)的屬性時總是應該這樣的。否則,像下面這樣的在繼承級上進行的查詢
SELECT NewColumn FROM SuperClass*將不能工作,因為子表會比上級表少一個屬性。
在目前的實現裡,新列/字段的預設(值)和約束子句會被忽略。你可以隨後用 ALTER TABLE 的 SET DEFAULT 形式設置預設(值)。(你還不得不用 UPDATE 把已存在行更新為預設值。)
在目前的實現裡,只有 FOREIGN KEY 約束可以增加到表中。要創建或者刪除一個唯一約束,可以創建一個唯一索引(參閱 CREATE INDEX)。要想增加 check (檢查)約束,你需要重建和重載該表,用的參數是 CREATE TABLE 命令的其他參數。
要修改表的結構,你必須是表的所有人。不允許更改系統表結構的任何部分。PostgreSQL
用戶手冊 裡有關於繼承的更多資訊。
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);對現存列改名:
ALTER TABLE distributors RENAME COLUMN address TO city;對現存表改名:
ALTER TABLE distributors RENAME TO suppliers;向表中增加一個外鍵約束:
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL
SQL92 對 ALTER TABLE 聲明了一些附加的Postgres目前還不直接支援的功能:
ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
增加或刪除表的約束(比如像檢查約束,唯一約束或外鍵約束)。要創建或刪除一個唯一約束,對應地創建或刪除一個唯一索引,要修改其他型態的約束,你需要重建和重載該表,使用 CREATE
TABLE 命令的其他參數。
例如,刪除表 distributors 的任何約束:
CREATE TABLE temp AS SELECT * FROM distributors; DROP TABLE distributors; CREATE TABLE distributors AS SELECT * FROM temp; DROP TABLE temp;
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
前,要刪除一個現存的列,表必須重新創建和重新裝載:
CREATE TABLE temp AS SELECT did, city FROM distributors; DROP TABLE distributors; CREATE TABLE distributors ( did DECIMAL(3) DEFAULT 1, name VARCHAR(40) NOT NULL, ); INSERT INTO distributors SELECT * FROM temp; DROP TABLE temp;